1、redis 支持如下 5 种数据结构
数据结构 | 说明 | 简介 |
---|---|---|
String | 字符串 | key-val |
Hash | 哈希 | filed-val 映射表 |
List | 列表 | 双向链表 |
Set | 集合 | element(元素无重复) |
Sorted Set | 有序集合 | element+score(元素无重复 + 分值) |
2、通用命令
命令 | 作用 | 时间复杂度 |
---|---|---|
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) |
3、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) |
4、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) |
5、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 |
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 自增 / 自减分数 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: 更多文章请关注微信公众号:浮话