1. 程式人生 > >Redis各資料結構常用命令

Redis各資料結構常用命令

redis 通用API


keys * 遍歷所有key 一般不在生產環境中使用 redis單執行緒,容易阻塞其他命令執行 O(n)

dbsize 計算key的總數 O(1)
exists 檢查key是否存在 O(1)
del key 刪除指定key-value O(1)
expire key seconds key在second秒後過期 O(1)
ttl key 檢視key剩餘的過期時間 O(1)
persist key 去掉key的過期時間 O(1)
type key 返回key的型別(string hash list set zset none)O(1)

字串:
鍵值結構:value可以存字串 二進位制  key -value
場景:快取 計數器 分散式鎖

get key 獲取key對應的value O(1)
set key value 設定key-value O(1)
del key 刪除key-value O(1)
incr key key自增1,如果key不存在,自增後get(key)=1
decr key key自減1,如果key不存在,自減後get(key)=-1
incrby key k key自增k,如果key不存在,自增後get(key)=k
decrby key k key自減k,如果key不存在,自減後get(key)=-k
set key value 不管key是否存在,都設定 o(1)
setnx key value key 不存在,才設定 o(1)
set key value xx key存在 才設定o(1)
mget key1 key2 key3... 批量獲取key,原子操作 o(n)
mset key1 value1 key2 value2 key3 value3 批量設定key-value o(n)
getset key newvalue #set key new value並返回舊的value o(1)
append key value #將value追加到舊的value o(1)
strlen key #返回字串的長度(注意中文)
incrbyfloat key 3.5 #增加key對應的值3.5
getrange key start end #獲取字串指定下標所有的值
setrange key index value #設定指定下標所有對應的值

hash雜湊:


雜湊鍵值結構為key - field(屬性) value(屬性值) field不能相同 value 可以相同

hget key field #獲取hash key 對應的field的value o(1)
hset key field value # 設定hash key 對應field的value o(1)
hdel key field 刪除hash key 對應field的value o(1)
hexists key field #判斷hash key 是否有field o(1)
hlen key #獲取hash key field的數量 o(1)
hmget key field field2... fieldN #批量獲取hash key的一批field對應的值 o(n)
hmset key field1 value1 field2 value2.... fieldN valueN #批量設定hash key的一批field value o(n)
hgetall key #返回hash key 對應所有的field和value o(n)
hvals key #返回hash key對應所有field的value o(n)
hkeys key #返回hash key 對應所有field o(n)


list列表:

特性:有序 可以重複 左右兩邊插入彈出
資料結構:key elements
rpush key value1 value2... valueN o(1~n)
#從列表右端插入值(1到N個)
lpush key value1 value2... valueN o(1~n)
#從列表左端插入值(1到N個)
linsert key before|after value newValue o(n) #在list指定的值前|後插入newValue
lpop key #從列表左側彈出一個item o(1)
rpop key #從列表右側彈出一個item o(1)
lrem key count value #根據count值,從列表中刪除所有value相等的項 o(n)(n)
(1)count>0,從左到右,刪除最多count個value相等的項
(2)count<0,從右到左,刪除最多Math.abs(count)個value相等的項
(3)count=0,刪除所有value相等的項
ltrim key start end #按照索引範圍修建列表 o(n)
lrange key start end(包括end)
#獲取列表指定索引範圍所有item
lindex key index #獲取列表指定索引的item o(n)
llen #獲取列表長度 o(1)
lset key index newValue #設定列表指定索引值為newValue o(n)
blpop key timeout #lpop阻塞版本,timeout是阻塞超時時間,timeout=0為永遠不阻塞
brpop key timeout #rpop阻塞版本,timeout是阻塞超時時間,timeout=0為永遠不阻塞

應用實現:

1.LRUSH + LPOP = Stack 棧
2.LRUSH + RPOP = Queue 佇列
3.LRUSH + LTRIM = Capped Collection 有固定數量的佇列
4.LPUSH + BRPOP = Message Queue 訊息佇列

集合set:

特性:無序 無重複 集合間操作
key values(element)

sadd key element #向集合key新增element(如果element已經存在,新增失敗) o(1)
srem key element #將集合key中的element移除掉 o(1)
scard key 計算集合大小
sismember key it #判斷it是否在集合中
srandmember key count #從集合中隨機挑count個元素
spop key #從集合中隨機彈出一個元素
smembers #獲取所有集合元素

sdiff set1 set2 #兩個集合的差集
sinter set1 set2 #兩個集合的交集
sunion set1 set2 #兩個集合的並集
sdiff|sinter|suion + store destkey.. #將差集、交集、並集結果儲存在destkey中

zset有序集合:

特性:有序 無重複
資料結構:key score value

zadd key score(可以重複) element(不可以重複) #新增score和element o(logN)
zrem key element #刪除元素
zscore key element #返回元素的分數
zincrby key incrbyScore element #增加或減少元素的分數
zcard key #返回元素的總個數
zrange key start end [WITHSCORES] #返回指定索引範圍內的升序元素[分值]
zrangebyscore key minScore maxScore [WITHSCORES] #返回指定分數範圍內的升序元素[分值]
zcount key minScore maxScore #返回有序集合內在指定分數範圍內的個數
zremrangebyrank key start end #刪除指定排名內的升序元素
zremrangebyscore key minScore maxScore #刪除指定分數內的升序