Redis篇 - 2. redis 數據結構與命令

一、redis 支持以下5種數據結構
數據結構 說明 簡介
String 字符串 key-val
Hash 哈希 filed-val 映射表
List 列表 雙向鏈表
Set 集合 element(元素無重複)
Sorted Set 有序集合 element+score(元素無重複+分值)
二、通用命令
命令 做用 時間複雜度
keys pattern 查找全部符合匹配的key O(n)
dbsize 返回當前數據庫的數量 O(1)
flushdb 清空當前數據庫全部key O(n)
flushall 清空全部數據庫全部key O(n)
type key 返回key的數據類型 O(1)
rename key new_key 修改key名稱 O(1)
exists key 檢查給定key是否存在 O(1)
del key 刪除key O(1)
expire key seconds 給key設定過時時間 O(1)
ttl key 查看key剩餘過時時間 O(1)
persist key 移除key剩餘過時時間 O(1)
三、String
命令 做用 時間複雜度
set key val 設置key val O(1)
get key 獲取key O(1)
del key 刪除key O(1)
set key val xx 更新key(不存在key時更新失敗) O(1)
setnx key val key不存在時設置key O(1)
setex key val seconnds 設置key並設置過時時間 O(1)
mset key1 val1 key2 val2 ... 批量設置key O(n)
mget key1 key2 ... 批量獲取key O(n)
incr key val key自增1;key不存在,set key val後自增1 O(1)
decr key val key自減1;key不存在,set key val後自減1 O(1)
incrby key n key自增k;key不存在,set key val後自增k O(1)
decrby key n key自減k;key不存在,set key val後自減k O(1)
getset key val set key val並返回舊的值 O(1)
append key val 給key追加值val O(1)
strlen key 獲取key長度 O(1)
incrbyfloat key f 給key增長小數 O(1)
setrange key offset val 用val從offset開始覆蓋 O(1)
getrange key start end 獲取指定區間的val O(1)
四、Hash
命令 做用 時間複雜度
hset key filed val 設置key filed val O(1)
hget key filed 獲取key filed O(1)
hdel key filed 刪除key filed O(1)
hexists key filed 檢測key filed是否存在 O(1)
hlen key 獲取key屬性值個數 O(1)
hsetnx key filed key filed不存在時設置key filed O(1)
hincrby key filed n key filed自增/自減(n能夠爲負數) O(1)
hincrbyfloat key filed f key filed自增/自減(f能夠爲負數) O(1)
hmset key filed1 val1 filed2 val2 ... 批量設置key filed O(n)
hmget key filed1 filed2 ... 批量獲取key filed O(n)
hgetall key 獲取key全部filed值 O(n)
hgetkeys key 獲取key全部filed key O(n)
hgetvals key 獲取key全部filed val O(n)
五、List
命令 做用 時間複雜度
lpush key val1 val2 ... 從頭部插入一個/多個val O(1~n)
lpop key 移除並返回頭部第一個元素 O(1)
rpush key val1 val2 ... 從尾部插入一個/多個val O(1~n)
rpop key 移除並返回尾部第一個元素 O(1)
lrang key start end 返回指定區間元素 O(s+n) s爲偏移量, n=e-s
ltrim key start stop 對列表進行修剪, 保留指定區間的元素 O(n)
llen key 獲取key長度 O(1)
lset key index val 設置指定索引index val O(1~n)
linsert key before/after existing_val new_val 在指定存在值以前/以後插入元素 O(n)
lindex key position 獲取指定position元素 O(1~n)
lrem key count val 移除與count相等的val O(n)
lpushx key val1 val2 ... 從頭部插入一個/多個已存在列表的val O(1~n)
rpushx key val1 val2 ... 從尾部插入一個/多個已存在列表的val O(1~n)
blpop key seconds 阻塞式lpop O(1)
brpop key seconds 阻塞式rpop O(1)
  • 常見場景
場景 命令方法
棧(Stack) lpush + lpop
隊列(Queue) lpush + rpop
固定列表(Capped Collection) lpush + ltrim
消息列表(Message Queue) lpush + brpop
六、集合
命令 做用 時間複雜度
sadd key val1 val2 ... 向集合添加一個/多個元素(已存在元素則忽略) O(n)
smembers key 獲取全部集合元素 O(n)
sismember key val1 檢測集合元素是否存在 O(1)
srandmember key {count} 隨機獲取指定個數集合元素(不會刪除) O(1~n)
spop key 隨機移除一個集合元素並返回(會刪除) O(1)
srem key val val1 ... 刪除集合元素 O(1~n)
smove key key1 val 將key集合中val移到key1集合 O(1)
scard key 獲取集合數量 O(1)
sinter key key1 ... 獲取集合交集 O(n)
sunion key key1 ... 獲取集合並集 O(n)
sdiff key key1 ... 獲取集合差集 O(n)
sinterstore new_key key key1 ... 獲取集合交集並存儲到新集合 O(n)
sunionstore new_key key key1 ... 獲取集合並集並存儲到新集合 O(n)
sdiffstore new_key key key1 ... 獲取集合差集並存儲到新集合 O(n)
七、有序集合
命令 做用 時間複雜度
zadd key score val ... 向集合添加一個/多個元素 O(log(N) * M) M 元素個數
zcard key 獲取集合數量 O(1)
zscore key val 獲取元素分數值 O(1)
zcount key mix max 獲取分數區間[mix, max]集合元素數量 O(log(N) + M)
zlexcount key mix max 獲取元素字典區間[mix, max]集合元素數量 O(log(N) + M)
zincrby key score val 集合元素val自增/自減分數score O(log(N))
zrank key val 獲取集合元素val的排名(從小到大) O(log(N))
zrevrank key val 獲取集合元素val的排名(從大到小) O(log(N))
zrange key start end [withscores] 獲取指定區間分數排名(從小到大)元素 O(log(N) + M)
zrevrange key start end [withscores] 獲取指定區間分數排名(從大到小)元素 O(log(N) + M)
zrangebyscore key min max [withscores] 獲取指定區間分數排名(從小到大)元素 O(log(N) + M)
zrevrangebyscore key max min [withscores] 獲取指定區間分數排名(從大到小)元素 O(log(N) + M)
zrangebylex key min max 獲取字典區間內集合元素 O(log(N) + M)
zrem key val val1 ... 刪除集合元素 O(log(N) * M)
zremrangebyscore key min max 刪除指定區間分數區間元素 O(log(N) + M)
zremrangebyrank key start stop 刪除指定排名rank內元素 O(log(N) + M)
zremrangebylex key min max 刪除字典區間內集合元素 O(log(N) * M)
zinterstore new_key n key key1 ... 獲取集合交集存儲到new_key(n 集合個數) O(N K)+O(M log(M))
zunionstore new_key n key key1 ... 獲取集合並集存儲到new_key(n 集合個數) O(N)+O(M log(M))

PS: 更多文章請關注微信公衆號:浮話redis

相關文章
相關標籤/搜索