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

32次阅读

共计 3488 个字符,预计需要花费 9 分钟才能阅读完成。

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 后自增 1 O(1)
decr key valkey 自减 1;key 不存在,set key val 后自减 1 O(1)
incrby key nkey 自增 k;key 不存在,set key val 后自增 k O(1)
decrby key nkey 自减 k;key 不存在,set key val 后自减 k O(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: 更多文章请关注微信公众号:浮话

正文完
 0