【Redis】不卡壳的 Redis 学习之路:从十大数据类型开始入手

news2024/11/24 17:01:37

目录

类型

String 字符串

List 列表

Set 集合

Sorted Set /ZSet 有序集合

Hash 哈希表

GEO 地理空间

HyperLogLog 基数统计

Bitmap 位图

BitField 位域

Stream 流

线上测试地址

常用命令

key 操作指令

String 操作指令

List 操作指令

Set 操作指令

ZSet 操作指令

Hash操作指令

GEO 操作指令

HyperLogLog 操作指令

Bitmap 操作指令

Bitfield 操作指令

Stream 操作指令(附示例)


这是Redis系列的第一篇( ̄∇ ̄)/,我们来介绍众说纷纭的Redis数据类型,本文会对 Redis 7.0 中10大数据类型的基本定义、使用场景、常用命令进行通俗易懂的介绍(就是额。。🤔说人话),看完会对Redis的数据类型方面有个全面的了解(应付个面试够够的),如果还想要更深入更全面的学习,我也都附上了官方文档的地址,可直达权威⁄(⁄ ⁄ ⁄ω⁄ ⁄ ⁄)⁄

正文开始┏ (^ω^)=

估计大家应该也都看过挺多相关的内容,但各个文章总有些小不同,首先强调下,本系列文章讨论的是 Redis 7.0,不同版本之间还是有有一些差异的,为确保准确,我们直接看官网

https://redis.io/docs/data-types/

类型

这里的类型是Value,Key一般都是String

  • Strings

  • Lists

  • Sets

  • Sorted Sets (ZSet)

  • Hashes

  • Streams

  • Geospatial

  • HyperLogLog

  • Bitmaps

  • Bitfields

String 字符串

  • Redis中最基本的类型,一个Key可以对应一个Value

  • 二进制安全的(可以包含任何数据,比如图片或者序列化的对象)

  • 一个Redis中的字符串value最多可以是512M

List 列表

  • 简单的字符串列表,按照被插入的顺序排序,你可以添加一个元素到列表的头部(左边)或者尾部(右边)

  • 底层是个双端链表,最多可以包含2^32-1个元素(4294967295,超过40亿个元素)

  • 对两端操作性能很高,通过索引下标操作中间节点性能会比较差

Set 集合

  • String类型的集合

  • 不允许重复 + 无序

  • 集合对象的编码可以是intset和hashtable(底层)

  • 通过哈希表实现的,所以查询、删除、添加的时间复杂度都是O(1)

  • 可以包含2^32-1个元素(4294967295,超过40亿个元素)

  • 应用场景

    • 微信抽奖小程序(sadd/spop/srandmember)

    • 朋友圈的点赞

    • QQ可能认识的人

Sorted Set /ZSet 有序集合

  • 与Set一样是String类型的集合

  • 不同的是每个元素都会关联一个double类型的分数(给Redis从小到大排序用的)

    • value变成了一个键值对:score1 value1

    • key1 score1 value1 key2 score2 value2

  • ZSet的成员是唯一的,但分数(score)可以重复

  • 通过哈希表实现的,所以查询、删除、添加的时间复杂度都是O(1)

  • 可以包含2^32-1个元素(4294967295,超过40亿个元素)

  • 应用场景

    • 各种排行榜

Hash 哈希表

  • K-V 键值对

  • 可以包含2^32-1个元素(4294967295,超过40亿个元素)

GEO 地理空间

  • 原理(实际上是个ZSet,score变成了经纬度)

    • 核心思想:将球体转换为平面,区块转换为一点

    • 主要分为3步:

      • 将三维地球变为二维坐标

      • 将二维坐标转换为一维的点块

      • 将一维的点块转换为二进制再通过base32编码

  • 主要用于存储地理位置信息,并对存储的信息进行操作,包括

    • 添加地理位置的坐标

    • 获取地理位置的坐标

    • 计算两个位置之间的距离

    • ……

  • 应用场景

    • 美团地图位置附近的酒店

    • 高德地图附近的核酸点

HyperLogLog 基数统计

  • 用完做基数统计的算法

    • 基数:是一种数据集,去重后的真实个数

    • 基数统计:用于统计一个几乎中不重复的元素的个数,就是对集合去重后剩余元素的计算,即去重脱水后的真实数据

  • 优点是在输入元素的数量或者体积特别大时,计算基数所需的空间总是固定且很小的

    • 每个HyperLogLog键只需要12kb内存,就可以计算出接近2^64个不同的元素的基数

    • 这和元素越多耗费内存越多的集合产生了鲜明的对比

  • 但HyperLogLog并不会记录每个元素的具体值

  • 可用于统计某个网站/文章的UV用户搜索🔍关键词的数量用户每天搜索不同词条的个数

    • UV unique visitor 独立访客(一般为用户IP)

Bitmap 位图

  • Bit arrays(or simply bitmaps)Bitmap是用String作为底层数据结构实现的一种统计二值状态的数据类型

  • 一个字节占8位(1 byte = 8 bit)

  • 由0和1组成的二进制位的bit数组(1 bit 只能存1个0/1)

  • 一般用于状态记录📝

    • 用户是否登陆过

    • 电影广告是否被点击播放过

    • 上下班打卡统计

BitField 位域

  • 可以一次性操作多个比特位域(连续的多个比特位),它会执行一系列操作并返回一个响应数组,这个数组中的元素对应参数列表中的相应操作的执行结果(其实就是一次性对多个比特位进行操作)

Stream 流

  • Redis 5.0 新增的数据结构 : MQ消息中间件+阻塞队列

  • 主要用于消息队列(MQ,Message Queue)

    • 支持消息队列的持久化

    • 支持自动生成全局唯一ID

    • 支持ack确认消息的模式

    • 支持消费组(多个消费者)模式等

  • Redis本身有一个发布/订阅来实现消息队列的功能,但他的缺点消息无法持久化,如果出现网络断开、Redis宕机等,消息就会被丢弃

    • 即发布/订阅可以分发消息,但无法记录历史消息

  • Redis的Stream提供了消息的持久化以及主从备份复制功能,可以让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息不丢失,让消息队列更加稳定和可靠

线上测试地址

如果有不想在本地安装Redis的同学可以试试这个官方提供的测试网站

https://try.redis.io/

常用命令

需要注意的有两点

  • 命令不区分大小写,但是key是区分大小写的
  • 中括号('[]')内的为可选参数

各个命令查询地址 https://redis.io/commands/

key 操作指令

指令

作用

备注

key *

查看当前库所有key

exists key

判断某个key是否存在

type key

查看某个key的类型

del key

删除指定的key

原子的

unlink key

非阻塞删除(仅将key从keyspace元数据中移除)

ttl key

查看还有多少秒过期(-1表示永不过期,-2表示已过期)

expire key 秒钟

为给定的key设置过期时间

move key dbindex

将当前数据库的key移动到给定的数据库db中(dbindex的值为0-15)

默认0

dbsize

查看当前数据库key的数量

flushdb

清空当前库

flushall

清空全部库

String 操作指令

指令

作用

可选项说明及备注

set key value [NX|XX] [GET][EX seconds|PX milliseconds|EXAT unit-time-milliseconds|KEEPTTL]

设置/添加

  • NX 键不存在的时候设置(键存在会设置失败)

  • XX 键存在的时候设置(会覆盖)

  • GET 先返回旧值,再设置新值

  • EX seconds 设置过期时间(单位:秒)

  • PX milliseconds 设置过期时间(单位:毫秒)

  • KEEPTT 设置续接过期时间(不设置默认用不失效-1)

批处理

mset key value [key value ...]

同时设置多个值

mget key value [key value ...]

同时获取多个值

msetnx key value

key不存在才设置

所有的key都不存在才会设置成功

getrange key start end

获取指定区域内的值

  • start 开始下标(从0开始)

  • end 结束下标

setrange key offset vaue

设置指定区域内的值

  • offset 开始下标

  • vaue 设置数量

数值增减

(必须是数字才行)

INCR key

递增数字

INCRBY key increment

增加减少指定的参数

  • increment 指步长

DECR key

递减数值

DECRBY key decrement

减少指定的参数

STRLEN key

获取字符串长度

APPENG key value

内容追加

分布式锁

(原子操作)

setnx key value

key不存在才设置

nx: set if not exsit

setex key seconds value

同时设置值和过期时间

ex: set with expire

getset key value

先get后set

等价于 set key value get

List 操作指令

指令

作用

可选项说明及备注

lpush key value

从左边👈设置/添加

rpush key value

从右边👉设置/添加

lrange key start stop

从左边👈开始遍历

  • start 开始下标(从0开始)

  • stop 结束下标

lrange key 0 -1 表示遍历全部

lpop

弹出最左边的值

rpop

弹出最右边的值

lindex

按照索引下标获得元素(从上到下)

左(上)右(下)

llen

获取list中的元素个数

lrem key N value

删除N值为value的元素

  • N 表示删除值的个数

ltrim key start stop

截取指定索引范围的值再赋值给key

  • start 开始下标(从0开始)

  • stop 结束下标

rpoplpush key1 key2

从key1中弹出最右边的,加入到key2的最左端并返回

lset key index value

将key中序号为index的值设置为value

  • index 要设置的值的序号(没有该序号则会报错)

linsert key before/after pivot element

在key中值为pivot的元素前/后插入值为element的元素

  • pivot 已有值

  • element 插入值

从上向向下👇第一个等于pivot的值

Set 操作指令

指令

作用

可选项说明及备注

sadd key member [member...]

添加元素

自动去重

smembers key

遍历所有元素

sismember key member

判断元素是否在集合中

srem key member[member...]

删除元素

scard key

获取集合里面的元素个数

srandmember key [n]

从集合中随机展现n个元素,不删除

  • n 展示元素的个数

spop key [n]

从集合中随机弹出/删除n个元素

  • n 弹出/删除元素的个数

smove key1 key2 [value]

将key1中的某个值value赋值给key2

  • value:key1中的某个值

集合运算

sdiff key [key...]

差集运算 A - B

sunion key [key...]

并运算 A U B

sinter key [key...]

交运算 A n B

sintercard numkeys key [key...] [limit num]

只返回基数(去重统计数)

  • num 返回个数

ZSet 操作指令

指令

作用

可选项说明及备注

zadd key [NX|XX] [GT|LT] [CH] [INCR] score member [score member ...]

向有序集合添加一个元素和该元素的分数

zrange key start stop [withscores]

按照元素分数从小到大的顺序,返回索引从start到stop之间的所有元素

  • withscores 带分数

  • start 开始下标(从0开始)

  • stop 结束下标

zrevrange key start stop [withscores]

zrange的反转(从大到小)

  • withscores 带分数

  • start 开始下标(从0开始)

  • stop 结束下标

zrangebyscore key min max [withscores][limit offset count]

获取指定分数范围的元素

  • (min 不包含

  • limit offset countoffset开始取count

zscore key member

获取元素的分数

zcard key

获取集合中元素的数量

zrem key member

删除值为指定分数的元素

  • member 要删除元素的value值

zincrby key increment member

增加某个元素的分数

  • increment 增加的值

zcount key min max

获取指定分数范围内的元素个数

  • min 开始

  • max 结束

zmpop

从键名列表中的第一个非空排序集中弹出一个或多个元素,他们是成员分数对

zrank key values

获取下标值(从0开始)

zrevrank key values

逆序获取下标值

Hash操作指令

指令

作用

可选项说明及备注

hset key field value [field value...]

添加/设置

  • field value 也是某个元素内的属性键值对

hget key field

获取键为key的元素中的field属性的值

批处理

hmset key field value [field value...]

批量添加/设置

hget key field [field ...]

批量获取

hgetall key

获取键为key的元素中的全部属性

hlen key

获取某个key内的全部数量

hexists key

判断是否存在键值为key值(0不存在)

hkeys key

获取键值为key值元素的所有字段名(field

hvals key

获取键值为key值元素的所有字段值(value

hincrby/hincrbyfloat key field increment

给键值为key值元素中field的字段值加increment

  • hincrby 加整数

  • hincrbyfloat 加小数

hsetnx key field value [field value...]

不存在才会新建成功

GEO 操作指令

指令

作用

可选项说明及备注

geoadd key

添加经纬度坐标

出现中文乱码,redis-cli启动时加个--raw

geopos

从键里面返回所有给定元素的位置(经纬度)

geodist key member1 member2 [m | km | ft | mi ]

返回给定位置之间的距离

geodist不仅可以计算两个 member 之间的距离,还可以计算一个 member 与 key 中多个 member 之间的距离

【示例】

  • 计算 member1 与 key 中 member2、member3、member4 三个 member 之间的距离:
    geodist key member1 member2 member3 member4
    • geodist会返回一个浮点数,表示两个地理位置之间的距离,如果某个 member 不存在,会返回空值(NULL)。
  • member1 member2 表示 GEO 类型中的两个 member

  • m | km | ft | mi 表示计算距离的单位

      如果没有单位参数,则默认使用米作为单位。

    • m:米

    • km:千米

    • mi:英里

    • ft:英尺

georadius key longitude latitude radius m|km|ft|mi [withdist] [withcoord] [withhash] [count num] [asc|desc] [store key] [storedist key]

以给定经纬度为中心,返回与中心距离离不超过给定最大距离的所有元素,且可以根据需求返回经纬度、距离等详细信息,并将查询结果保存到一个新的有序集合中。

  • longitude:表示中心点的经度

  • latitude:表示中心点的纬度

  • radius:表示半径大小,与单位配合使用

  • withdist返回元素时,同时返回距离(米)

  • withcoord返回元素时,同时返回经纬度

  • withhash 经过geohash编码后的52位有符号整型

  • count num 返回不超过num条记录

  • asc|desc:表示返回结果时是否按照距离从近到远或从远到近排序,默认为从近到远

  • store key:选项表示将返回结果存储到一个新的有序集合 key

  • storedist key:选项表示将返回结果存储到一个新的有序集合 key 中,并把查询位置和目标位置间的距离作为值保留到集合中

georadiusbymember key member radius m|km|ft|mi [withdist] [withcoord] [withhash] [count num] [asc|desc] [store key] [storedist key]

georadiusbymember各个参数的含义和作用与georadius命令的相应参数完全相同,唯一的不同是 georadiusbymember 使用的查询中心是指定的成员,而不是经纬度坐标。

geohash

返回坐标的geohash表示

geohash算法生成的base32编码值

HyperLogLog 操作指令

指令

作用

可选项说明及备注

pfadd key element [element]...

添加指定的元素

pfcount key [key ...]

返回给定的基数估计值

pfmerge destkey sourcekey [sourcekey...]

合并统计

Bitmap 操作指令

指令

作用

可选项说明及备注

时间复杂度

setbit key offset value

为键为key的元素序号为offset的值设置值为value

  • offset 偏移量(从0开始)

  • value

O(1)

getbit key offset

获取指定key的第offset

O(1)

strlen key

统计字节数占用多少(按字节)

O(1)

bitcount key start end

返回指定范围[start, end]内值为1的数量

  • start 开始序号

  • end 结束序号

O(n)

bitop operation destkey key

对不同的二进制存储数据进行位运算(AND、OR、NOT、XOR)

  • operation 包括AND、OR、NOT、XOR

  • destkey 新产生的值的key

O(n)

Bitfield 操作指令

实际生产中几乎……%不怎么用,这里就不列举叻,还是想了解可查看官网

https://redis.io/commands/bitfield/

Stream 操作指令(附示例)

特殊符号:

  • -+ 最小和最大可能出现的ID

  • $   表示读新到来的,即随着新消息的到来,$ 的指针会自动向前移动

  • >   表示从第一条尚未被消费的数据开始读起

  • *   添加消息的ID自增

指令

作用

可选项说明及备注

队列相关

xadd key [NOMKSTREAM] [MAXLEN | MINID [=|~] threshold [LIMIT count]] *|id field value [field value...]

添加消息到队列末尾,返回消息

  • ID 由两个由一个字符分隔的数字指定-

  • 1526919030474-55

  • 两个数量都是 64 位整数。当自动生成 ID 时,第一部分是生成 ID 的 Redis 实例的 Unix 时间(以毫秒为单位)。第二部分只是一个序列号,用于区分在同一毫秒内生成的 ID。

  • 消息ID必须比上个大

  • 默认用星号表示自动生成规矩

    • 用于xadd命令,让系统自动生成ID

  • NOMKSTREAM 当前面的key不存在时,Redis的Stream默认会先创建该key并添加元素,如果加上则会NOMKSTREAM返回nil

  • MAXLEN|MINID [=|~] threshold [LIMIT count]:可选参数,用来控制 Stream 的长度或者指定 Stream 的最小 ID

    • MAXLEN N:限制 Stream 的最大长度为 N。

    • MINID ID:设置 Stream 的最小 ID 为 ID。

    • =|~:这是一个可选的前缀,用于指定限制条件的类型。如果使用 =,表示限制条件为长度具体等于阈值 threshold;如果使用 ~,表示限制条件为长度小于或等于阈值 threshold

    • threshold:指定的长度阈值。如果限制条件为 ~,表示 Stream 最大长度将小于或等于 threshold,如果限制条件为 =,表示 Stream 的最大长度会被限制为 threshold

    • LIMIT count:可选参数,用于限制每次执行 XADD 命令时添加的条目数量,以防止一次性写入过多的数据。

  • field value:这是一个 XADD 命令的数据格式,包含每个条目的所有字段和值。每个字段和值都是一个 key-value 对。例如 field1 value1 field2 value2...

xrange key start end count

用于获取消息列表(可以指定范围),从最旧的开始

【示例】

  • 查询名为 mystream 的 Redis Stream的所有消息:
    xrange mystream - +
  • 查询名为 mystream 的 Redis Stream,在包括 ID 为 1000 的数据和 ID 为 2000 的数据的区间内,返回不多于10条数据:
    xrange mystream 1000-2000 COUNT 10

  • start:查询起始位置。可以是 - 或者 + 加上一个具体的 ID

    • - 1000 表示查询小于等于 1000 的所有消息

    • + 则表示查询大于等于给定的 ID 的所有消息

  • end:查询结束位置。可以和 start 同时使用形成一个区间

    • - + 表示查询所有消息

    • 1000 2000 表示查询大于等于 1000 和小于等于 2000 的所有消息

  • count:可以控制查询返回的结果数量,默认返回所有消息

    • 如果给定一个正整数,表示返回的消息数量不大于该值

    • 如果给定一个负数,表示返回的消息数量不小于该值

xrevrange key start end count

用于查询 Redis Stream 中的消息,从最新的开始( xread、xrange 命令的默认查询起始点是最旧的消息)

【示例】

  • 查询最新的 10 条消息:xrevrange mystream + - COUNT 10
  • 查询 ID 大于等于 1000 的所有消息:
    xrevrange mystream + 1000

  • 参数解释同xrange

xdel key ID [ID...]

删除一个或多个消息(需要注意的是 xdel 的操作一旦删除了消息就无法恢复)

  • ID:需要删除的消息的 ID

    • 可以是一个 ID,也可以是多个

xlen key

返回 Redis Stream 中的消息数量

无论有多少数据,时间复杂度都是 O(1)

xtrim key MAXLEN | MINID [=|~] threshold [LIMIT count]

将 Redis Stream 中的消息按照指定的条件进行裁剪y(同xdel一样,删除了无法恢复)

【示例】

  • 保留 Redis Stream 中最后 100 条消息:
    xtrim mystream MAXLEN 100

  • 保留 Redis Stream 中消息 ID 大于 1586610271071-3 的消息:
    xtrim mystream MINID 1586610271071-3

  • MAXLEN | MINID [=|~] threshold 裁剪策略

    • MAXLEN,需要传递一个数字,表示需要保留的消息数量

    • MINID,需要传递一个消息 ID,表示需要保留的消息的最小 ID 值

  • LIMIT count 控制查询返回的结果数量,默认返回所有消息

xread [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] ID [ID ...]

从Redis Stream 中读取数据

【示例】

  • 读取 mystream 中最新的 10 条消息:
    xread COUNT 10 STREAMS mystream $

  • 读取 mystream 和 anotherstream 中最新的 20 条消息:
    xread COUNT 20 STREAMS mystream $ anotherstream $

  • COUNT:需要返回的消息数量,表示一次最多返回的消息数量

  • BLOCK:是否以阻塞的方式读取消息,并设置阻塞超时时间,单位为毫秒

    • 默认不阻塞,milliseconds如果设为0,则永远阻塞

    • 当 Stream 中没有新消息时,xread 命令会等待阻塞超时时间后自动返回

  • STREAMS:需要读取的 Redis Stream 的名称和读取位置,可以多次使用该参数,每次读取一个 Stream。

    • Stream 名称:需要读取的 Redis Stream 数据结构的名称

    • Read ID:读取的起始位置,可以是消息 ID 或者特殊的符号,比如 $>

消费者相关

同一个消费组中的不同消费者不能消费同一个消息,但不同消费组的消费者可以,可以进行负载均衡

xgroup create key groupname ID|$ [MKSTREAM]

用于在 Redis Stream 中创建一个新的消费者组,并将指定消费者加入该组

【示例】

  • 创建一个名为 mygroup 的消费者组,并从最新的消息开始读取:xgroup create mystream mygroup $ MKSTREAM

  • 创建一个名为 mygroup 的消费者组,并从消息 ID 为 1586610271071-3 的消息开始读取:
    xgroup create mystream mygroup 1586610271071-3

  • group:消费者组名称。

  • id:消费者组的起始读取位置

    • $ 表示从最新的消息开始读取,也可以是某个具体的消息 ID

  • ...:需要传递两个参数,将用于表示从 Stream 中读取消息时的选项,具体如下:

    • MKSTREAM:如果 Stream 不存在,则创建一个新的 Stream

xreadgroup group group consumer [COUNT count] [BLOCK milliseconds] [NOACK] STREAMS key [key ...] ID [ID ...]

用于从 Redis Stream 中读取数据,并且将其发送给指定的消费者组

【示例】

  • 从消费者组 mygroup 中的 myconsumer 开始读取 mystream 中最新的 10 条消息:
    xreadgroup GROUP mygroup myconsumer COUNT 10 STREAMS mystream >

  • 从消费者组 mygroup 中的 myconsumer 开始读取 mystream 和 anotherstream 中最新的 20 条消息:
    xreadgroup GROUP mygroup myconsumer COUNT 20 STREAMS mystream > anotherstream >

  • group:需要读取的消费者组的名称

  • consumer 需要读取的消费者的名称

  • COUNT count:需要返回的消息数量,表示一次最多返回的消息数量

  • BLOCK milliseconds 设置阻塞超时时间,单位为毫秒(同xread)

  • NOACK:在消费者组中设置 NOACK 后,当接收到一条消息后,Redis 会假设消息被消费并且不会在向消费者发送消息确认信息

  • STREAMS:需要读取的 Redis Stream 数据结构的名称和读取位置,可以多次使用该参数,每次读取一个 Stream

    • key:需要读取的 Redis Stream 数据结构的名称

    • ID:读取的起始位置,可以是消息 ID 或者特殊的符号,比如 $>

xpending key group [[IDLE min-idle-time] start end count [consumer]]

于从消费者组中获取关于 Stream 的消费状态信息,包括等待下一个确认的消息还未分配给消费者的消息已经被消费者处理但还未确认的消息

【示例】

  • 获取消费者组 mygroup 中所有消费者等待确认的消息数量(最多不超过10个):
    xpending mystream mygroup - + 10

  • 获取消费者组 mygroup 中消费者 myconsumer1 还未确认的消息数量:
    xpending mystream mygroup - + 10 myconsumer1

  • 获取消费者组 mygroup 中最长未确认时间不超过 5 分钟的未确认消息:
    xpending mystream mygroup - + 100 500000

    • 其中,指定了 -+ 分别表示消息的起始 ID 和结束 ID,100 表示返回的最大消息数量,500000 表示最长未确认时间为 5 分钟

  • group 消费者组名称

  • IDLE min-idle-time 表示最长未确认时间,即在消费者组中存在未确认的消息时,距离这些消息上次被处理的时间超过了 IDLE 参数指定的时间,那么这些消息将被列入 xpending 返回的结果列表中,单位为毫秒

  • start 消息的开始 ID

  • end 消息的结束 ID

  • count 需要返回的消息数量

  • consumer 可选参数,指定返回特定消费者的未确认消息列表

xack key group ID [ID ...]

用于向 Redis Stream 数据结构中添加消费者对消息的确认,即表示此消息已经被成功消费和处理

【示例】

  • 确认消费者组 mygroup 中消费者 myconsumer1 已消费并处理消息 1535007665264-0
    xack mystream mygroup 1535007665264-0 myconsumer1

  • 确认消费者组 mygroup所有消费者已消费并处理消息 1535007665264-1
    xack mystream mygroup 1535007665264-1

  • group:消费者组名称

  • ID:需要确认的消息 ID(一个或多个)

xinfo [consumers key groupname] [groups key] [stream key] [help]

用于打印Stream/Consumer/Group的详细信息,便于监控和调试

【示例】

  • 获取流 mystream 的信息:
    xinfo stream mystream

  • 获取消费者组 mygroup 的信息:
    xinfo groups mystream mygroup

  • 获取消费者组 mygroup 中所有消费者的信息:
    xinfo consumers mystream mygroup

  • 获取消费者组 mygroup 中消费者 myconsumer1 的信息:
    xinfo consumers mystream mygroup myconsumer1

  • groups:获取指定 Stream 中所有消费者组的信息,包括每个组的名称、拥有者及各组消费的消息的数量和时间戳最小值等信息

  • consumers:获取指定 Stream 和消费者组中所有消费者的信息,包括每个消费者的名称、未确认消息数量及它们所消费的消息列表等信息

  • stream:获取指定 Stream 中的信息,包括流的长度、最小ID和最大ID等信息

  • groups <key>:获取指定 Stream 中消费者组的信息,包括每个组的名称、拥有者及各组消费的消息的数量和时间戳最小值等信息

  • consumers <key> <group>:获取指定流和消费者组中所有消费者的信息,包括每个消费者的名称、未确认消息数量及它们所消费的消息列表等信息。其中 <key> 表示流的名称,<group> 表示消费者组的名称

  • help:帮助文档

搞定~撒个花(。・ω・。)ノ🎉🎉🎉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/460349.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32CubeMX | 使用STM32定时器的PWM输入模式测量脉冲宽度和周期

STM32CubeMX | 使用STM32定时器的PWM输入模式测量脉冲宽度和周期 目录 STM32CubeMX | 使用STM32定时器的PWM输入模式测量脉冲宽度和周期1、介绍2、STM32CubeMX配置2.1 基本配置2.2 PWM输出配置2.3 PWM输入捕获配置 3、程序修改和测试 本篇博客以STM32F103C8为例&#xff0c;其他…

selenium_交互 (谷歌浏览器驱动下载 xpath插件安装)

安装selenium &#xff08;1&#xff09;查看谷歌浏览器版本 谷歌浏览器右上角 ‐‐> 帮助 ‐‐> 关于 查看 浏览器版本&#xff1a; &#xff08;2&#xff09;操作谷歌浏览器驱动下载地址 http : // chromedriver . storage . googleapis . com / index . html 找到…

FPGA、 CPU、GPU、ASIC区别

一、为什么使用 FPGA&#xff1f; 众所周知&#xff0c;通用处理器&#xff08;CPU&#xff09;的摩尔定律已入暮年&#xff0c;而机器学习和 Web 服务的规模却在指数级增长。 人们使用定制硬件来加速常见的计算任务&#xff0c;然而日新月异的行业又要求这些定制的硬件可被重新…

2023第十四届蓝桥杯 C/C++大学生A组省赛 满分题解

写在前面 以下代码&#xff0c;目前均可通过民间OJ数据&#xff08;dotcpp & New Online Judge&#xff09;&#xff0c; 两个OJ题目互补&#xff0c;能构成全集&#xff0c;可以到对应链接下搜题提交&#xff08;感谢OJ对题目的支持&#xff09; 如果发现任何问题&…

汽车制造数字化转型如何做?有哪些可行性案例?

引语&#xff1a;砥砺前行的先行者&#xff0c;为长期主义者带去曙光 国内制造企业亟需加速探索数字化转型之路。但是传统软件服务商提供的PLM、MES等系统已经无法满足企业个性化需求。通过传统软件服务商进行二次开发&#xff0c;成本高、周期长&#xff0c;难以适应迅速变化的…

少儿Python每日一题(25):岛屿问题

原题解答 本次的题目如下所示(题目来源:蓝桥杯): 编程实现: 有一片海域划分为N*M个方格,其中有些海域已被污染(用0表示),有些海域没被污染(用1表示)。请问这片N*M海域中有几块是没被污染的独立海域(没被污染的独立海域是指该块海域上下左右被已污染的海域包围,且…

【手把手做ROS2机器人系统开发六】创建用户自定义msg和srv文件

创建用户自定义msg和srv文件 目录 创建用户自定义msg和srv文件 一、程序编写 1、创建软件包 2、创建msg消息和srv服务文件夹 3、定义msg消息示例 4、定义srv服务示例 5、修改和添加编译选项 6、软件包设置 二、程序测试 1、编译软件包 2、测试查询信息 3、测试查询服务…

EasyCVR视频融合平台黑名单功能更新,防止设备恶意注册平台

为了防止别人恶意注册国标设备&#xff0c;EasyCVR视频融合平台也具备拦截设备注册的功能&#xff0c;即通过国标设备ID和注册IP地址进行拦截&#xff0c;也就是黑名单功能。 在3.1版本之前&#xff0c;黑名单的设置是在配置中心—平台接入中&#xff0c;在输入框中添加黑名单I…

在阿里做测试开发的这5年,收获与感悟...

正好在离职交接空档期&#xff0c;就抽空简单分享自己的一些个人经历给大家&#xff0c;希望对刚毕业不久或者工作三五年的同学能有一些帮助。 测试新人 我的职业生涯开始和大多数测试人一样&#xff0c;开始接触都是纯功能界面测试。那时候在一家电商公司做测试&#xff0c;做…

湿法冶金以及铼提取工艺,湿法冶金工艺特点及工艺流程

湿法冶金是利用浸出剂在一定温度压力下与矿石接触&#xff0c;把矿石中有用的金属溶解后再从溶液中回收有价金属的一种工艺&#xff0c;因为其过程大都是在水溶液中进行&#xff0c;所以又被称为“水法冶金”。 01 湿法冶金工艺特点及工艺流程 湿法冶金作为解决我国金属矿产资…

SpringBoot第 17 讲:SpringBoot+JWT

关于JWT的讲解请参考&#xff1a;SpringCloud第14讲&#xff1a;&#xff08;番外篇&#xff09;JWT 一、项目演示 没有登陆直接请求列表接口&#xff0c;系统会要求先进行登录 登录成功后请求列表接口&#xff0c;可以正常响应数据 二、后台开发 2.1、pom.xml 添加redis…

迪赛智慧数——柱状图(堆叠柱状图):各年龄段人群服装消费频次

效果图 你多久买一次新衣服&#xff1f; 70后买得“精”&#xff0c;90后换得“勤”&#xff0c;90后已成为服装消费者主力&#xff01;90后中平均每周1次或更多的占比达12%。当买衣服的理由越来越感性&#xff0c;服装貌似已不再是“这届” 消费者的基础刚需。 数据源&#…

数据库系统-查询优化

文章目录 一、查询优化概述二、优化的基本思路2.1 语义优化-内容等价性2.2 语义优化-语法等价性2.3 执行优化(物理层优化)2.4 优化在整个DBMS的位置 三、逻辑查询优化3.1 逻辑优化整体思路3.2 关系代数操作次序交换的等价性定理1 连接&连接 积&积 交换律定理2 连接&…

Leetcodes刷题之删除链表的倒数N个结点和删除链表的中间的结点

吾心信其可行&#xff0c;则移山填海之难&#xff0c;终有成功之日。 --孙中山 目录 &#x1f349;一.删除链表的倒数N个结点 &#x1f33b;1.双指针 &#x1f341;2.求链表的长度 &#x1f338;二.删除链表的中间的结点 &#x1f349;一.删除链…

DataGridView 真·列头不高亮 真·列头合并

高亮BUG VB.Net&#xff0c;在 .NET Framework 4.8 的 WinForm 下(即不是 WPF 的绘图模式、也不是 Core 或 Mono 的开发框架)&#xff0c;使用 DataGridView 行模式&#xff0c;还是有个列头表现为高亮显示&#xff1a; 查找各种解决方式: 设置 ColumnHeadersDefaultCellSty…

Python3语法笔记(前篇)

文章目录 前言基础杂项变量和数据变量与运算数值字符串列表&#xff08;list&#xff09;、元组&#xff08;tuple&#xff09;和range序列类型&#xff08;sequence types&#xff09;和切片&#xff08;slicing&#xff09;集合&#xff08;set&#xff09;和字典&#xff08…

PS批量给图片加水印

一、打开PS&#xff0c;导入图片 点击菜单栏-文件-打开-载入一张需要设置文字水印的图片 二、点击菜单栏-窗口-动作&#xff0c;打开Photshop的动作组工作台窗口 先点击新建组图标新建一个组类别&#xff0c;再点击新建动作图标新建一个动作&#xff0c;新建后自动开始录制 …

DASFAA 2023|创邻周研博士分享前沿图数据库观点

4月17-20日&#xff0c;2023年第28届高级应用数据库系统国际会议&#xff08;DASFAA2023&#xff09;在天津成功举行。创邻科技CTO周研博士受邀参会&#xff0c;围绕Galaxybase国产高性能图数据库进行精彩分享。 DASFAA 2023由DASFAA指导委员会&#xff08;DASFAA Steering Co…

CVPR 2023 | 语义分割新范式:点监督遇上隐式场

密集预测(dense prediction)网络是解决诸如语义分割和图像本征分解(intrinsic decomposition)等场景理解问题的基本框架。现有工作[1-2] 通常使用像素级标注作为训练密集预测模型的监督。但是像素级别的密集标注非常昂贵&#xff0c; 对一些任务也无法给出精准的像素标注&#…

Linux-初学者系列3——虚拟光驱使用mount挂载操作

虚拟光驱使用mount挂载操作 一、mount挂载操作1、利用图形将光盘镜像文件&#xff0c;放入光驱设备中2、找到Linux光驱设备&#xff08;青色&#xff09; 1、挂载光盘和分区mount命令语法&#xff1a;示例&#xff1a;卸载&#xff08;注意事项&#xff09; 二、Linux快捷键 一…