Redis篇 - 2. redis 数据结构与命令

1、redis 支持如下5种数据结构
数据结构说明简介
String字符串key-val
Hash哈希filed-val 映射表
List列表双向链表
Set集合element(元素无重复)
Sorted Set有序集合element+score(元素无重复+分值)
2、通用命令
命令作用时间复杂度
keys pattern查找所有符合匹配的keyO(n)
dbsize返回当前数据库的数量O(1)
flushdb清空当前数据库所有keyO(n)
flushall清空所有数据库所有keyO(n)
type key返回key的数据类型O(1)
rename key new_key修改key名称O(1)
exists key检查给定key是否存在O(1)
del key删除keyO(1)
expire key seconds给key设定过期时间O(1)
ttl key查看key剩余过期时间O(1)
persist key移除key剩余过期时间O(1)
3、String
命令作用时间复杂度
set key val设置key valO(1)
get key获取keyO(1)
del key删除keyO(1)
set key val xx更新key(不存在key时更新失败)O(1)
setnx key valkey不存在时设置keyO(1)
setex key val seconnds设置key并设置过期时间O(1)
mset key1 val1 key2 val2 …批量设置keyO(n)
mget key1 key2 …批量获取keyO(n)
incr key valkey自增1;key不存在,set key val后自增1O(1)
decr key valkey自减1;key不存在,set key val后自减1O(1)
incrby key nkey自增k;key不存在,set key val后自增kO(1)
decrby key nkey自减k;key不存在,set key val后自减kO(1)
getset key valset key val并返回旧的值O(1)
append key val给key追加值valO(1)
strlen key获取key长度O(1)
incrbyfloat key f给key增加小数O(1)
setrange key offset val用val从offset开始覆盖O(1)
getrange key start end获取指定区间的valO(1)
4、Hash
命令作用时间复杂度
hset key filed val设置key filed valO(1)
hget key filed获取key filedO(1)
hdel key filed删除key filedO(1)
hexists key filed检测key filed是否存在O(1)
hlen key获取key属性值个数O(1)
hsetnx key filedkey filed不存在时设置key filedO(1)
hincrby key filed nkey filed自增/自减(n可以为负数)O(1)
hincrbyfloat key filed fkey filed自增/自减(f可以为负数)O(1)
hmset key filed1 val1 filed2 val2 …批量设置key filedO(n)
hmget key filed1 filed2 …批量获取key filedO(n)
hgetall key获取key所有filed值O(n)
hgetkeys key获取key所有filed keyO(n)
hgetvals key获取key所有filed valO(n)
5、List
命令作用时间复杂度
lpush key val1 val2 …从头部插入一个/多个valO(1~n)
lpop key移除并返回头部第一个元素O(1)
rpush key val1 val2 …从尾部插入一个/多个valO(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 valO(1~n)
linsert key before/after existing_val new_val在指定存在值之前/之后插入元素O(n)
lindex key position获取指定position元素O(1~n)
lrem key count val移除与count相等的valO(n)
lpushx key val1 val2 …从头部插入一个/多个已存在列表的valO(1~n)
rpushx key val1 val2 …从尾部插入一个/多个已存在列表的valO(1~n)
blpop key seconds阻塞式lpopO(1)
brpop key seconds阻塞式rpopO(1)
  • 常见场景
场景命令方法
栈(Stack)lpush + lpop
队列(Queue)lpush + rpop
固定列表(Capped Collection)lpush + ltrim
消息列表(Message Queue)lpush + brpop
6、集合
命令作用时间复杂度
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)
7、有序集合
命令作用时间复杂度
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自增/自减分数scoreO(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: 更多文章请关注微信公众号:浮话

    原文作者:浮话
    原文地址: https://segmentfault.com/a/1190000019298791
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞