天天看點

Redis(2):常用指令詳解

redis指令不區分大小寫

通用指令:

1. 獲得符合規則的鍵名清單:

keys pattern   

其中pattern符合glob風格  ? (一個字元) * (任意個字元) [] (比對其中的任意一個字元)  \x (轉義字元)

需要注意的是keys指令會周遊redis中的所有鍵,如果鍵比較多,會影響性能

keys *  會列出目前庫中的所有鍵, 注意這個列出的不僅僅是string類型的,其他所有類型的key都包括(即使是hash類型的)。

Redis(2):常用指令詳解
Redis(2):常用指令詳解

127.0.0.1:6379> HSET hashkey key1 value1
(integer) 1
127.0.0.1:6379> keys *
1) "hashkey"      

Keys

2. 判斷一個鍵是否存在:

exists key

如果存在傳回 (integer) 1 否則傳回 (integer) 0

3. 删除鍵:

DEL key [key ...]

可以傳入多個key ,其實可以配合 keys指令一起使用:

Redis(2):常用指令詳解
Redis(2):常用指令詳解
# 可以發現直接使用*,此時是沒法删除已有的hashkey鍵
zyq@ubuntu:~/KiDe/Python/test$ redis-cli KEYS * | xargs redis-cli DEL
(integer) 0
zyq@ubuntu:~/KiDe/Python/test$ redis-cli KEYS "hash*" | xargs redis-cli DEL
(integer) 1


zyq@ubuntu:~/KiDe/Python/test$ redis-cli
127.0.0.1:6379> HSET hashkey key1 value1
(integer) 1
127.0.0.1:6379> exit
# 而使用 ` `包裹指令來執行的時候 * 就可以删除前面設定進去的hashkey鍵
zyq@ubuntu:~/KiDe/Python/test$ redis-cli DEL `redis-cli KEYS "*"`
(integer) 1
zyq@ubuntu:~/KiDe/Python/test$ redis-cli 
127.0.0.1:6379> HSET hashkey key1 value1
(integer) 1
127.0.0.1:6379> exit
zyq@ubuntu:~/KiDe/Python/test$ redis-cli DEL `redis-cli KEYS "hash*"`
(integer) 1

# 需要注意的一點還有,第二種用 `` 實作的删除比第一種效率要高。      

DEL

4. 獲得鍵值的資料類型:

type key

如果key不存在 傳回 none,否則傳回key對應的值的類型

字元串類型:

SET key value    

GET key

INCR key(如果存儲的值不是數字或者增加之後超過範圍,會報錯) 相當于 value++,但是這個是原子操作

INCRBY key increment(該值可正可負)

DECR key 、 DECRBY key decrement

INCRBYFLOAT key increment  (支援 incrbyfloat bar 5E+4)

APPEND key value (隻是作為字元串追加)

STRLEN key  (如果是中文,則傳回中文編碼後的字元串的長度 例如如果是utf-8編碼的"你好" 則 strlen key 傳回6)

MGET key [key ...] / MSET key value [key value ...]   可以同時設定或者得到對應的值

GETBIT key offset                得到特定位上的值 如果超過長度則為0

SETBIT key offsetValue            設定特定位上的值 如果超過長度前面不夠的用0補齊,此時要考慮性能

BITCOUNT key [start] [end]        計算從開始到結束的位上1的個數

BITOP operation destkey key [key ...]  

BITPOS key 0/1 [start] [end] 獲得第一個是0或1的位置的下标

常見的指令使用情況如下:

Redis(2):常用指令詳解
Redis(2):常用指令詳解
1 127.0.0.1:6379> set foo bar
 2 OK
 3 127.0.0.1:6379> get foo
 4 "bar"
 5 # 對于非數字的增加,會抛出錯誤
 6 127.0.0.1:6379> incr foo
 7 (error) ERR value is not an integer or out of range
 8 # 如果對于不存在key值加1,相當于建立一個key值為0,然後再往上加一
 9 127.0.0.1:6379> incr newkey
10 (integer) 1
11 127.0.0.1:6379> get newkey
12 "1"
13 # float加的時候支援科學計數法
14 127.0.0.1:6379> INCRBYFLOAT newkey 1e+10
15 "10000000001"
16 # 往字元串後面追加值
17 127.0.0.1:6379> append foo bar2
18 (integer) 7
19 127.0.0.1:6379> get foo
20 "barbar2"
21 # 同時設定多個字元串類型的值
22 127.0.0.1:6379> mset key1 你好 key2 我好 key3 大家好
23 OK
24 # 長度根據編碼方式有關
25 127.0.0.1:6379> STRLEN key1
26 (integer) 6
27 127.0.0.1:6379> GETBIT key1 1
28 (integer) 1
29 127.0.0.1:6379> GETBIT key1 2
30 (integer) 1
31 127.0.0.1:6379> BITCOUNT key1
32 (integer) 27      

String

散列類型:

類似于map ,常用指令如下:

HSET key field vlaue

HGET key field  

HMSET key field value [field value ...]

HMGET key field [field ...]

HGETALL key

HEXISTS key field 判斷field是否存在

HSETNX key field value 當字段不存在的時候進行指派,原子操作

HINCRBY key field increment  

HDEL key field [field ...]

HKEYS key

HVALS key

HLEN key

指令的使用情況如下:

Redis(2):常用指令詳解
Redis(2):常用指令詳解
1 127.0.0.1:6379> hset hashkey key1 value1
 2 (integer) 1
 3 127.0.0.1:6379> hget hashkey key1
 4 "value1"
 5 127.0.0.1:6379> hmset hashkey key2 value2 key3 value3 key4 value4
 6 OK
 7 127.0.0.1:6379> hmget hashkey key1 key2 key3 key4
 8 1) "value1"
 9 2) "value2"
10 3) "value3"
11 4) "value4"
12 127.0.0.1:6379> hmget hashkey key1 key2 key3 key
13 1) "value1"
14 2) "value2"
15 3) "value3"
16 4) (nil)
17 127.0.0.1:6379> HGETALL hashkey
18 1) "key1"
19 2) "value1"
20 3) "key2"
21 4) "value2"
22 5) "key3"
23 6) "value3"
24 7) "key4"
25 8) "value4"
26 127.0.0.1:6379> HEXISTS hashkey key11
27 (integer) 0
28 127.0.0.1:6379> HSETNX hashkey key1 value11
29 (integer) 0
30 127.0.0.1:6379> HSETNX hashkey key11 value11
31 (integer) 1
32 127.0.0.1:6379> HINCRBY hashkey key5 11
33 (integer) 11
34 127.0.0.1:6379> HDEL hashkey key11 key5
35 (integer) 2
36 127.0.0.1:6379> hkeys hashkey
37 1) "key1"
38 2) "key2"
39 3) "key3"
40 4) "key4"
41 127.0.0.1:6379> HVALS hashkey
42 1) "value1"
43 2) "value2"
44 3) "value3"
45 4) "value4"
46 127.0.0.1:6379> hlen hashkey
47 (integer) 4      

Hash

清單類型:

LPUSH key value [value ... ]

RPUSH key value [value ... ]

LPOP key  

RPOP key  

LLEN key

LRANGE key start stop  (此時獲得的元素包含下标為stop的, 負數表示倒數)

LREM key count value 表示從清單中删除count個值為value的元素 (如果count為正數則從左邊起删除、為負數表示從右邊起删除)

LINDEX key value

LSET key index value

LTRIM key start end 隻保留清單指定範圍的元素(包括下标為end元素)。通常與lpush一起使用 lpush logs $newlog; ltrim logs 0 99

LINSERT key BEFORE|AFTER pivot value 在值為pivot的元素前或者後插入一個值為value的元素 如果沒有找到值為pivot的元素,則傳回-1 ,否則傳回插入成功之後清單的總長度

RPOPLPUSH source destination  從source清單中rpop一個元素然後lpush到destination清單中去 (source和destination可以是同一個,desitnation如果不存在會建立一個) 該操作也是原子的

Redis(2):常用指令詳解
Redis(2):常用指令詳解
1 127.0.0.1:6379> lpush list value1 value2 
 2 (integer) 2
 3 127.0.0.1:6379> rpush list value3 value4
 4 (integer) 4
 5 127.0.0.1:6379> lpop list
 6 "value2"
 7 127.0.0.1:6379> rpop list
 8 "value4"
 9 127.0.0.1:6379> llen list
10 (integer) 2
11 127.0.0.1:6379> lrange list 0 -1
12 1) "value1"
13 2) "value3"
14 127.0.0.1:6379> lrem key 1 value
15 (integer) 0
16 # 超過長度傳回空
17 127.0.0.1:6379> LINDEX list 2
18 (nil)
19 127.0.0.1:6379> LINDEX list 1
20 "value3"
21 # 超過長度報錯
22 127.0.0.1:6379> LSET list 3 value4
23 (error) ERR index out of range
24 127.0.0.1:6379> LSET list 2 value4
25 (error) ERR index out of range
26 127.0.0.1:6379> LSET list 1 value4
27 OK
28 # 如果不存在對應的元素,則設定失敗傳回-1
29 127.0.0.1:6379> LINSERT list BEFORE 1 value3
30 (integer) -1
31 127.0.0.1:6379> lrange list 0 -1
32 1) "value1"
33 2) "value4"
34 127.0.0.1:6379> LINSERT list BEFORE value4 value3
35 (integer) 3
36 127.0.0.1:6379> lpush list2 value21 value22
37 (integer) 2
38 127.0.0.1:6379> RPOPLPUSH list list2
39 "value4"
40 127.0.0.1:6379> lrange list 0 -1
41 1) "value1"
42 2) "value3"
43 127.0.0.1:6379> lrange list2 0 -1
44 1) "value4"
45 2) "value22"
46 3) "value21"      

List

集合類型:

SADD key member [member ... ]

SREM key member [member ... ]

SMEMBERS key  

SISMEMBER key member  

SDIFF key [key ...]  取第一個集合和剩下的所有集合的差集

SINTER key [key ...] 取所有集合的交集

SUNION key [key ...] 取所有集合的并集

SCARD key  求長度

SDIFFSTORE destination key [key ...] 就是增加了一個存儲的目标清單

SINTERSTORE destination key [key ...]

SUNIONSTORE destination key [key ...]

SRANDMEMBER key [count]  随機獲得集合中的元素,如果省略count則隻獲得一個,如果傳入了count 那麼如果count為正,則獲得min(count, scard key)個不同的元素,如果count為負,則随機獲得-count個元素,但是元素可能相同

SPOP key 随機彈出一個元素

Redis(2):常用指令詳解
Redis(2):常用指令詳解
1 127.0.0.1:6379> SADD set member1 member2 member3
 2 (integer) 3
 3 127.0.0.1:6379> srem set member3 member4
 4 (integer) 1
 5 127.0.0.1:6379> SMEMBERS set
 6 1) "member1"
 7 2) "member2"
 8 127.0.0.1:6379> SISMEMBER set member3
 9 (integer) 0
10 127.0.0.1:6379> SADD set2 member2 member3 member4
11 (integer) 3
12 127.0.0.1:6379> SDIFF set set2
13 1) "member1"
14 127.0.0.1:6379> SINTER set set2
15 1) "member2"
16 127.0.0.1:6379> SUNION set set2
17 1) "member4"
18 2) "member1"
19 3) "member3"
20 4) "member2"
21 127.0.0.1:6379> SCARD set
22 (integer) 2
23 127.0.0.1:6379> SDIFFSTORE set3 set set2
24 (integer) 1
25 127.0.0.1:6379> SMEMBERS set3
26 1) "member1"
27 127.0.0.1:6379> SRANDMEMBER set2 
28 "member3"
29 # 為正的時候最多将set中所有元素傳回
30 127.0.0.1:6379> SRANDMEMBER set2 5
31 1) "member4"
32 2) "member3"
33 3) "member2"
34 # 為負的時候傳回絕對值個數的元素,并且可能相同
35 127.0.0.1:6379> SRANDMEMBER set2 -5
36 1) "member3"
37 2) "member4"
38 3) "member2"
39 4) "member2"
40 5) "member3"
41 127.0.0.1:6379> SPOP set2
42 "member2"
43 127.0.0.1:6379> SMEMBERS set2
44 1) "member4"
45 2) "member3"      

Set

有序集合類型:

預設按照score升序排列

ZADD key score member [score member ...]

ZSCORE key member  

ZRANGE key start stop [withscores]   其中的start stop表示下标

ZREVRANGE key start stop [withscores]  

ZRANGEBYSCORE key min max [withscores] [limit offset count]  獲得指定分數範圍的元素 預設是包含min和max 如果不想包含某一個界,請在值前加 (  eg : zrangebyscore zset1 70 (100 withscores

且 min和max 可以使用 +inf 或者 -inf 表示正無窮大和負無窮大  後面的limit offset count 相當于sql中的分頁查詢

ZREVRANGEBYSCORE key max min [withscores] [limit offset count] 需要注意此時 max和min的位置調換了

ZINCRBY key increment member 給特定元素增加分數

ZCARD key

ZCOUNT key min max  這裡是統計在min和max之間的元素個數

ZREM key member [member ...]

ZREMRANGEBYRANK key start stop 删除固定下标範圍的元素

ZREMRANGEBYSCORE key min max  删除分數範圍内的元素

ZRANK key member   得到對應元素的下标,如果不存在傳回 nil

ZREVRANK key member  

ZINTERSTORE destination numkeys key [key ...] [weights weight [weight...]] [AGGREGATE SUM|MIN|MAX]  和sinterstore差不多,差別在于weights參數指定權重,指定之後對應的集合中的值要乘以權重

并且 AGGREGATE 參數指定新集合的元素值來源方式,預設為sum,即為兩者之和 numkeys指定要處理的集合個數

同理 有 ZUNIONSTORE 這裡不再贅述 (PS: 沒有ZDIFFSTORE)

Redis(2):常用指令詳解
Redis(2):常用指令詳解
1 127.0.0.1:6379> ZADD key 1 member1 2 member2 3 member3 4 member3
 2 (integer) 3
 3 127.0.0.1:6379> ZADD key 1 member1 2 member2 3 member3 4 member4
 4 (integer) 1
 5 127.0.0.1:6379> ZSCORE key member1
 6 "1"
 7 127.0.0.1:6379> ZRANGE key 0 -1
 8 1) "member1"
 9 2) "member2"
10 3) "member3"
11 4) "member4"
12 127.0.0.1:6379> zrange key 1 2
13 1) "member2"
14 2) "member3"
15 127.0.0.1:6379> ZREVRANGE key 1 2 WITHSCORES
16 1) "member3"
17 2) "3"
18 3) "member2"
19 4) "2"
20 127.0.0.1:6379> ZRANGEBYSCORE key 1 3 WITHSCORES LIMIT 0 2
21 1) "member1"
22 2) "1"
23 3) "member2"
24 4) "2"
25 # 注意反向的時候min和max的下标也要換過來
26 127.0.0.1:6379> ZREVRANGEBYSCORE key 1 3 WITHSCORES LIMIT 0 2
27 (empty list or set)
28 127.0.0.1:6379> ZREVRANGEBYSCORE key 3 1 WITHSCORES LIMIT 0 2
29 1) "member3"
30 2) "3"
31 3) "member2"
32 4) "2"
33 127.0.0.1:6379> ZINCRBY key 2 member3
34 "5"
35 127.0.0.1:6379> ZCARD key
36 (integer) 4
37 127.0.0.1:6379> ZCOUNT key 3 1
38 (integer) 0
39 127.0.0.1:6379> zcount key 1 3
40 (integer) 2
41 127.0.0.1:6379> ZREM key member1 
42 (integer) 1
43 127.0.0.1:6379> ZREMRANGEBYRANK key 0 0
44 (integer) 1
45 127.0.0.1:6379> zrange key 0 -1
46 1) "member4"
47 2) "member3"
48 127.0.0.1:6379> ZREMRANGEBYSCORE key 4 4
49 (integer) 1
50 127.0.0.1:6379> zrange key 0 -1
51 1) "member3"
52 127.0.0.1:6379> zrange key 0 -1 WITHSCORES
53 1) "member3"
54 2) "5"
55 127.0.0.1:6379> zadd zkey2 1 member3 2 member4
56 (integer) 2
57 127.0.0.1:6379> ZINTERSTORE key3 2 key zkey2
58 (integer) 1
59 127.0.0.1:6379> zrange key3 0 -1 WITHSCORES
60 1) "member3"
61 2) "6"
62 127.0.0.1:6379> ZUNIONSTORE key3 2 key zkey2 AGGREGATE MAX
63 (integer) 2
64 127.0.0.1:6379> zrange key3 0 -1 WITHSCORES
65 1) "member4"
66 2) "2"
67 3) "member3"
68 4) "5"      

ZSet

黎明前最黑暗,成功前最絕望!