⌛ Redis7 十大数据类型 (下篇)

Redis7 十大数据类型介绍及使用

1.1 Redis环境搭建

1.1.1 用虚拟机 VMware Workstation Pro 搭建 centos7

1.1.2 用 FinalShell 连接linux

【成功连接画面】

我们这里使用 Docker+Shell 脚本安装Redis最新版

shell脚本百度网盘下载地址:

1.1.2 用 Another Redis Desktop Manager 连接Redis

1.2 redis位图(bitmap)

Redis的 位图(bitmap) 是由0和1状态表现的二进制位的bit数组,主要适合在一些场景下进行空间的节省,并有意义的记录数据。例如一些大量的bool类型的存取,一个用户365天的签到记录,签到了是1,没签到是0,如果用普通的key/value进行存储,当用户量很大的时候,需要的存储空间是很大的。如果使用位图进行存储,一年365天,用365个bit就可以存储,365个bit换算成46个字节(一个稍长的字符串),如此就节省了很多的存储空间。

1.2.1 setbit

SETBIT key offset value (setbit 键 偏移位 只能零或者1)

1.2.2 getbit

GETBIT key offset

1.2.3 strlen

STRLEN key (统计字节数占用多少)

可以看出来bitmap的偏移量是从0开始的,不是字符串长度而是占据几个字节,超过8位后自己按照8位一组一byte再扩容

1.2.4 bitcount

BITCOUNT key start end (全部键里面含有1的有多少个)

1.2.5 bitop

BITPOS key bit start end (统计连续偏移位为1的有几个)

1.3 redis基数统计(HyperLogLog)

Redis 的 HyperLogLog 是一种用于基数统计的算法,主要用于在极大数据量的情况下快速估算集合中唯一元素 的数量。

基数统计 :用于统计一个集合中不重复的元素个数,就是对集合去重复后剩余元素的计算

1.3.1 PFADD

PFADD key element element ... (添加指定元素到 HyperLogLog 中。)

1.3.2 PFCOUNT

PFCOUNT key key... (返回给定 HyperLogLog 的基数估算值)

1.3.3 PFMERGE

PFMERGE destkey sourcekeysourcekey.... (将多个 HyperLogLog 合并为一个 HyperLogLog)

需要注意的是HyperLogLog统计的是基数的数量,并不保存具体数值

1.4 redis地理空间(GEO)

Redis的GEO(Geo Redis)是一个用于存储和操作地理空间数据的Redis模块,它提供了一组命令,可以将地理位置数据存储为Redis键值,并支持各种地理位置查询和操作。

1.4.1 GEOADD

GEOADD key NX\|XX CH longitude latitude member longitude latitude member ... (添加经纬度坐标 )

1.4.2 GEOPOS

GEOADD key NX\|XX CH longitude latitude member longitude latitude member ... (添加经纬度坐标 )

1.4.3 GEOHASH

GEOHASH key member member .. (返回坐标的geohash表示 )

1.4.4 GEODIST

GEODlST key member1 member2 unit (两个位置之间距离 )

1.4.5 GEORADIUS

GEORADIUS (以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素 )

1.4.6 GEOADIUSBYMEMBER

GEOADIUSBYMEMBER (找出位于指定范围内的元素,中心点是由给定的位置元素决定 )

1.5 redis流(Stream)

Redis Stream是Redis 5.0版本引入的一个新的数据类型,主要用于实现消息队列(MQ,Message Queue)。它提供了消息的持久化和主备复制功能,可以让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息不丢失。

1.5.1 XADD

XADD key lD field string field string ... (添加消息到队列末尾 )

客户端显示传入规则:Redis对于ID有强制要求,格式必须是时间戳-自增Id这样的方式,且后续ID不能小于前一个ID

Stream的消息内容,也就是图中的Message Content它的结构类似Hash结构,以key-value的形式存在。

1.5.2 XRANGE

XRANGE key start end COUNT count (用于获取消息列表(可以指定范围),忽略删除的消息 )

1.5.3 XREVRANGE

XREVRANGE key end start COUNT count (倒序展示消息队列)

1.5.4 XDEL

XDEL key ID lD .. (根据ID删除消息)

1.5.5 XLEN

XDEL key ID lD .. (获取某个消息中的个数)

1.5.6 XTRIM

XTRIM key MAXLEN \~ count (用于对Stream的长度进行截取,如超长会进行截取)

!image.png(p9-juejin.byteimg.com/tos-cn-i-k3...

1.5.7 XREAD

XREAD COUNT count BLOCK milliseconds STREAMS key key ... D lD ... (用于获取消息(阻塞/非阻塞),只会返回大于指定ID的消息)

1.5.8 XGROUP CREATE

XGROUP CREATE key groupname id$ MKSTREAM (用于创建消费者组)

$表示从Stream尾部开始消费

0表示从Stream头部开始消费

创建消费者组的时候必须指定 ID, ID 为 0 表示从头开始消费,为 $ 表示只消费新的消息,队尾新来

1.5.9 XREADGROUP GROUP

XREADGROUP GROUP group consumer COUNT count BLOCK miliseconds NOACK, STREAS key \[key . D \[lD .. (读取消费者里面的全部数据)

stream中的消息一旦被消费组里的一个消费者读取了,就不能再被该消费组内的其他消费者读取了,即同一个消费组里的消费者不能消费同一条消息。刚才的XREADGROUP命令再执行次,此时读到的就是空值

1.5.10 XPENDING

XPENDING key group start end count consumer (查询每个消费组内所有消费者「已读取、但尚未确认」的消息)

1.5.11 ACK

向消息队列确认消息处理已完成

1.6 总结

本问主要介绍了 redis位图(bitmap)、redis基数统计(HyperLogLog)、redis地理空间(GEO)、redis地理空间(GEO)、redis流(Stream)的内容以及用法

redis 常用于以下场景:

  1. 缓存:加速数据的访问,减少对后端数据库的负载。
  2. 会话管理:存储用户会话信息。
  3. 排行榜:处理诸如点击量、评分等数据的排名。
  4. 发布/订阅:实现消息的发布和订阅。
  5. 计数器:用于计数,如文章的阅读量等。
相关推荐
子兮曰3 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰3 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
爱勇宝3 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
胡写代码3 天前
别再前后端各写一套表单校验了
java·后端
大勇前进3 天前
原生 PHP 还是 Laravel?小项目到底要不要上框架
后端
yuzhi_liu3 天前
我用 LangGraph4j 实现 Multi-Agent Supervisor
后端
alsmile3 天前
Node-RED 之外,国产规则引擎的新方案:基于标准语法,Go 先行实现
后端·开源·go
大白803 天前
PHP 内存溢出排查思路:看懂报错日志,精准定位问题
后端
二月龙3 天前
PHP 接口返回统一响应封装,让前后端对接更省心
后端
盖伦发发3 天前
软件工程SOLID 五大设计原则
后端·软件工程