Stream
Redis Stream 是 Redis 5.0 版本引入的一种新的数据类型,它是一个持久化的、可查询的、可扩展的消息队列服务。Stream 类型的数据结构类似于一个日志系统,数据被添加到 Stream 的末尾,并且每个数据都会被分配一个唯一的序列号,这个序列号是按照时间顺序递增的。
主体
- 队列:Stream的主要实体,用于存储管理消息
- 生产者:使用XADD命令向队列中创建消息
- 消费者:按照消费者分组消费队列中的消息,同一个消费分组中的所有消费者使用同一个消费游标(同消费组内负载均衡、消费组间广播)
生产者相关命令
xadd
向Stream队列中添加消息,命令格式:XADD key [NOMKSTREAM] [<MAXLEN | MINID> [= | ~] threshold [LIMIT count]] <* | id> field value [field value ...]
- NOMKSTREAM:默认情况下key不存在时自动创建key,若使用NOMKSTREAM参数则不会自动创建
- MAXLEN:队列最大可存储的消息数量,后面使用=时与指定数量强一致,使用~时与指定数量大致相等
- LIMIT count:LIMIT表示消息添加后需要裁剪队列中消息的数量,count用于指定裁剪的具体数量
- <* | id>: 指定当前新增消息的id,若使用*,则redis自动创建id
队列相关命令
xinfo stream
查看队列的详细信息,包含消息内容,消息数量,消费组信息
xdel
删除队列中的消息
xlen
查看队列中消息的长度
xrange
根据指定的id范围,查看队列中的消息
xrevrange
根据指定的id范围,倒叙查看队列中的消息
xtrim
裁剪队列中的消息
xinfo groups
查询队列的消费分组信息
xinfo consumers
查询队列的消费者的信息
xpending
查看队列中已经消费,待ack确认的消息
消费者相关命令
xgroup create(ENTRIESREAD参数为redis.7.x新特性)
创建消费者分组,命令格式:XGROUP CREATE key group <id | $> [MKSTREAM] [ENTRIESREAD entries-read]
- MKSTREAM:Strean不存在时自动创建Stream
- ENTRIESREAD: 消费分组需要跳过的已读消息数量,正数时跳过队列前的已消费消息,负数时跳过最近已消费的消息
xgroup createconsumer
创建消费者
xgroup delconsumer
删除消费者
xgroup destroy
删除消费分组
xgroup setid
修改消费者分组当前消费的消息id和需要跳过的消息数量,命令格式:XGROUP SETID key group <id | $> [ENTRIESREAD entries-read]
- $: 设置已消费id为当前队列中最大的id
- ENTRIESREAD entries-read: 设置需要跳过的消息数量
xread
从队列中读取消息
xreadgroup
通过消费者消费队列中的消息,命令格式:XREADGROUP GROUP group consumer [COUNT count] [BLOCK milliseconds]
[NOACK] STREAMS key [key ...] id [id ...]
xclaim
消费待确认列表中的消息,命令格式:XCLAIM key group consumer min-idle-time id [id ...] [IDLE ms]
[TIME unix-time-milliseconds] [RETRYCOUNT count] [FORCE] [JUSTID] [LASTID lastid]
- min-idle-time:消息未处理时间,消息最后的处理时间与当前时间的时间差大于这个时间时才会匹配成功
- IDLE(ms): 修改消息的未处理时间差
- TIME(unix-time-milliseconds): 修改消息最近一次被处理的具体时间
- RETRYCOUNT:修改消息被重复处理的次数
- FORCE:将消息强制添加到待处理列表
- JUSTID:只获取消息id
- LASTID:获取的消息的id需要小于指定的LASTID
xautoclaim
消费待确认列表中的消息,不需要指定消息id,命令格式:XAUTOCLAIM key group consumer min-idle-time start [COUNT count] [JUSTID]
xack
确认消息的消费状态
Bitmap
Redis位图,由0和1组成的二进制数组;可以做布隆过滤器、签到统计、用户访问统计
setbit
根据指定的下标给位图数据设置0或1,redis自动按照下标扩容,扩容时以字节byte为基础单位(8bit)
getbit
获取位图数据中指定下标的值
bitcount
获取位图数据中数值为1的数量,可按照字节或位为单位的范围获取
bitop
对多个位图的数据的数据位做逻辑运算操作,命令格式:BITOP <AND | OR | XOR | NOT> destkey key [key ...]
bitpos
返回字符串里面第一个被设置为1或者0的bit位。
HyperLogLog
Redis HyperLogLog (简称HLL)是一种用于统计基数(cardinality)的数据结构,基数是指一个集合中不重复元素的个数;可用于统计网页访问量。
pfadd
添加数据元素
pfcount
统计基数个数(去重后的元素个数)
pfmerge
汇总多个基数队列
geo
地图数据类型,提供通过经纬度检索附近地点的功能
geoadd
按照经纬度添加地点,命令格式:GEOADD key [NX | XX] [CH] longitude latitude member [longitude
latitude member ...]
geopos
获取地点经纬度
geohash
获取地点坐标,将经纬度转换为hash值,便于存储
geodist
计算两个地点之间的距离,命令格式:GEODIST key member1 member2 [M | KM | FT | MI]
georadius
给出指定的地址经纬度,获取该地点周围指定距离内的地点,命令格式:GEORADIUS key longitude latitude radius <M | KM | FT | MI>
[WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC | DESC]
[STORE key | STOREDIST key]