【速成Redis】03 Redis 五大高级数据结构介绍及其常用命令 | 消息队列、地理空间、HyperLogLog、BitMap、BitField

前言:

上篇博客我们讲到redis五大基本数据类型(也是就下图的第一列)。 

【速成Redis】02 Redis 五大基本数据类型常用命令-CSDN博客文章浏览阅读1k次,点赞24次,收藏10次。该篇适用于速成redis。本篇我们将讲解:redis五大基本数据类型的常用语句。https://blog.csdn.net/weixin_71246590/article/details/142366022?spm=1001.2014.3001.5501

这篇博客我们将介绍右边这一列高级数据类型。

食用说明:初学者建议边看边看边敲。复习者可根据目录快速复习某个命令。

目录

1.发布订阅功能

- 订阅某频道:subscribe channel

- 在某频道发布信息:publish channel message

2.消息队列Stream

A:流 

 - 添加消息:XADD [MAXLEN ] [ ...]

- 求消息个数 :XLEN 

- 查看所有消息:XRANGE  - +

- 根据消息id删除消息:XDEL   message_id

- 删除所有消息:xtrim    maxlen 0

- 读消息 :XREAD COUNT BLOCK STREAMS

B:消费者组 

 - 创建一个新的消费者组 :XGROUP CREATE [MKSTREAM]

- 查询特定流上的消费者组信息:XINFO GROUPS mystream

 - 创建消费者:XGROUP CREATECONSUMER key group consumer [MKSTREAM]

-  消费者从消费者组中读取消息:XREADGROUP  GROUP COUNT BLOCK STREAMS

- 消费者确认某条信息:XACK  [id ...]

- 查看消费者组中待处理的消息(还未被 XACK 确认)XPENDING   [ []]

 3.地理空间Geospatial

- GEOADD key longitude latitude member [longitude latitude member ...] :将地理空间数据(经纬度坐标)添加到 Redis 集合中

- 获取集合中两个点之间的距离::GEODIST key member1 member2

- GEOREASH 以一个成员的位置或指定的经纬度为中心,按照圆形或者矩形的范围内搜索其他成员。

4.HyperLogLog

- PFADD key member [merber ...] 将指定的元素添加到 HyperLogLog 中,自动去重

-PFCOUNT key:查看基数/返回与指定 HyperLogLog 相关联的唯一元素的近似计数。

- PFMERGE destkey sourcekey [sourcekey ...] :将多个 HyperLogLog 合并为一个

5.位图BitMap

- SETBIT key offset value :设置指定位置上的位 (bit) 为 0 或 1

- GETBIT key offset :获取指定位置上的值

- SET key value

value: 要存储的字符串值(可以是二进制、十进制、十六进制等形式)。

- BITCOUNT  key [start end]:计算字符串中的 比特位值为 1 的总数

扩展:为什么BITCOUNT 命令在统计某种状态(如签到、点赞等)时特别好用?

- BITPOS key bit [start] [end] :查找第一个设置为指定值的位(bit)的位置

常见应用场景:

 6.位域BitField 

 BITFIELD key [GET|SET|INCRBY] type offset [value] [overflow]


1.发布订阅功能

- 订阅某频道:subscribe channel

subscribe 频道名

在一个终端订阅daimajiang频道


- 在某频道发布信息:publish channel message

publish 某频道 xx信息

在daimajiang频道发布信息:redis

第一个终端成功收到信息

订阅频道的终端可以有多个 ,发布信息的终端也可以有多个。

发布订阅功能的局限性:消息无法持久化、无法记录历史消息等等。下面学的消息队列Stream就能解决这些问题。


2.消息队列Stream

这是redis5.0版本引入的一个新的数据结构,一个轻量级的消息队列。

命令都以x开头。


A:流 

 - 添加消息:XADD <stream-name> [MAXLEN <maxlen>] <id> <field1> <value1> [<field2> <value2> ...]

参数说明:

  • <stream-name> :要追加消息的流的名称。如果流不存在,Redis 会自动创建它。
  • [MAXLEN <maxlen>] :可选参数,用于限制流的长度。它会在追加新消息时自动删除旧消息,保持流的长度在指定的最大值之内。
  • <id>:消息的唯一标识符。你可以使用特殊值 *,由 Redis 自动生成一个基于时间戳的唯一 ID。也可以自己填。
  • <field1> <value1>:消息的字段和值对。每个消息至少包含一个字段和值对。

示例: 

使用*来自动生成消息id。

回响信息就是生成的消息id。

 

如果使用*生成id的话,redis可以保证id是自增的,手工指定id需要自己保证id自增。


- 求消息个数 :XLEN <stream-name>

表示该流有三个消息。


- 查看所有消息:XRANGE <stream-name> - +


- 根据消息id删除消息:XDEL  <stream-name> message_id


- 删除所有消息:xtrim  <stream-name>  maxlen 0


- 读消息 :XREAD COUNT <count> BLOCK <milliseconds> STREAMS <stream-name> <id>

参数说明:

  • COUNT:指定读取的消息数量。
  • BLOCK:阻塞读取,指定等待新消息的时间,单位是毫秒。设置为 0 表示无限等待。
  • STREAMS:指定从哪些流读取消息。<id> 表示从哪个位置开始读取消息,通常 0 表示读取所有消息。

示例: 

表示从daimajiang 流里读取两条信息,从下标0开始读,最多等待1s。

$:表示从流中的最新消息开始读取,并且只读取新插入的消息。

此时可以在另一个终端执行xadd操作,这边就能收到最新消息。


B:消费者组 

 消费者组是一种管理 Redis Streams(流)中的消息处理的机制。

在 Redis 中,一个消费者组不能直接关联到多个流。每个消费者组(consumer group)是与一个特定的消息流(stream)绑定的,消费者组会从这个绑定的流中读取消息并处理。

可以理解为我们通过消费者组,来对流中的信息进行控制。


 - 创建一个新的消费者组 :XGROUP CREATE <stream> <group> <id> [MKSTREAM]

  • <stream>:Stream 的名称。
  • <group>:消费者组名称。
  • <id>:从哪个位置开始读取消息(通常为$,表示从当前的最新消息开始;或者为0,表示从Stream的最开始读取消息)。
  • MKSTREAM:如果 Stream 不存在,则自动创建一个空的消息流。

示例:

创建名为group1的消费者组,并指示它从 daimajiang 流中的第一个消息(ID为0)开始读取。

 XGROUP CREATE myStream myGroup $ MKSTREAM

该命令用于创建一个名为 myGroup 的消费者组,关联到 myStream 流中,并从最新的消息(ID为$)开始消费。如果流 myStream 不存在,它会通过 MKSTREAM 选项自动创建一个空的流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值