- redis 命令官网
https://redis.io/docs/latest/commands/
- 在 redis-cli 中使用 help 命令
查看
help @string
基础命令
keys * # * 代表通配符
set key value # 设置键值对
del key # 删除键
expire key 时间 # 给键设置时间
-2 代表时间到期了, -1 代表永不过期
ttl key # 查看键剩余的时间
exists key # 查看键是否存在
String 类型
setex key 秒数 value
set key value ex 秒数
设置秒数
setnx key value
set key value nx
如果不存在才进行存储,存在不处理
incrby key 数字
增减(value为数字)
incr # 自增1
incrbyfloat key 数值 # 小数自增
mset k v k v
mget k v k v
批量设置批量取
hash 类型
hsetnx 名称 key value
判断是否存在
hgetall 名称
获取所有
hkeys 名称
获取所有键名
hvals 名称
获取所有值
hmset 名称 key value
hmget 名称 key
批量设置批量获取
list 类型
lpush key value
rpush key value
左右推入
lpop key value
rpop key value
左右取
lrange key 起 始
按索引取部分
blpop key 时间
brpop key 时间
阻塞取出
set 类型
sadd key member
添加
srem key member
移除
scard key
返回元素个数
sismember key member
判断是否是成员
smembers
获取set中的所有元素
sinter key key
交集
sdiff key key
差集
sunion key key
并集
sortedset 类型
zadd key score member
添加
zrem key member
移除
zscore key member
获取指定分数
zrank key member
获取指定元素的排名
zcard key
获取所有元素个数
zcount key 数字 数字
统计分数范围内的元素的个数
zincrby key 数字 member
给 member 增加指定步长
zrange key 数字 数字
获取排名范围内的元素
zrangebyscore key 数字 数字
获取分数范围内的元素
zdiff,zinter,zunion
交并补
-
介绍
Redis 中的 list 相当于顺序表,并且内部更接近于“双端队列”,所以也支持头插和尾插的操作,可以当做队列或者栈来使用,同时也存在下标的概念,不过和 Java 中的下标不同,Redis 支持负数下标,-1 表示倒数第一个元素,-2 表示倒数第二个元素,和 Java 中的 List 相同的是,列表中的元素是有序的,并且允许重复 -
常用命令
命令
介绍
时间
rpush key value [value …]
将一个或多个值插入到列表 key 的表尾(最右边)
O (k),k 是元素个数
lpush key value [value …]
将一个或多个值插入到列表 key 的表头(最左边)
O (k),k 是元素个数
linsert key before
在列表的元素 pivot 之前插入元素 value
O (n),n 是 pivot 距离头的距离
after pivot value
在列表的元素 pivot 之后插入元素 value
O (n),n 是 pivot 距离头的距离
lrange key start end
获取列表指定范围内的元素
O (s+n),s 是 start 偏移量,n 是 start 到 end 的范围。
lindex key index
通过索引获取列表中的元素
O (n),n 是索引的偏移量
llen key
获取列表的长度
O (1)
lpop key
移除并返回列表 key 的头元素
O (1)
rpop key
移除并返回列表 key 的尾元素
O (1)
lrem key count value
count 大于 0 时,从左开始搜索,小于 0 时从右开始搜索,删除count 个值等于 value 的元素
O (k),k 是元素个数
ltrim key start end
保留 key 对应列表中指定区间 [start, end] 的元素
O (k),k 是元素个数
lset key index value
将列表 key 下标为 index 的元素的值设置为 value
O (n),n 是索引的偏移量。
blpop
lpop 的阻塞版本
O (1)
brpop
rpop 的阻塞版本
O (1)
- 内部编码
在 Redis 3.2 之前主要采用linkedlist和ziplist,3.2 之后主要采用quicklist
linkedlist:双向链表
ziplist:经过特殊编码的连续内存块的顺序存储结构,它将多个元素紧凑地存储在一起,以节省内存空间
quicklist:它是一个双向链表,每个节点是一个 ziplist
- 应用场景
消息队列
可以使用 lpush + brpop 来实现生产者-消费者模型队列
最新消息列表
用于展示最新的一些信息,如社交媒体平台上用户的最新动态、新闻网站的最新消息等,每当有新消息产生时,使用rpush命令将消息添加到 List 的尾部。要获取最新消息,通过lrange命令并设置合适的参数来获取 List 尾部的若干条消息。比如,在一个微博系统中,用户发布的微博可以存储在一个 List 结构中,通过获取 List 的尾部消息来展示用户关注的人发布的最新微博,可以方便地控制显示的消息数量,并且按照消息的发布顺序进行存储和展示,易于实现分页功能,以展示更多的消息