⌛ 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. 计数器:用于计数,如文章的阅读量等。
相关推荐
小二·13 分钟前
Redis 7 分布式缓存架构实战
redis·分布式·缓存
小刘|1 小时前
Spring WebFlux + AI 流式输出深度解析:Spring AI 与 LangChain4j 效果差异溯源
java·后端·spring
夕除1 小时前
Spring Security 配置类(SecurityConfig)
java·后端·spring
lfwh1 小时前
探针程序技术解析:基于 Spring Boot 非 Web 模式的云服务监控告警系统
前端·spring boot·后端
武子康1 小时前
Java-22 深入浅出 MyBatis - 手写ORM框架3 手写SqlSession、Executor 工作原理
java·后端
ikoala1 小时前
Codex 不得不装的 12 个插件,都在这了
前端·javascript·后端
摇滚侠1 小时前
SpringMVC 入门到实战 简介和入门案例 01-13
java·后端·spring·intellij-idea
蝎子莱莱爱打怪1 小时前
自用推荐|XTerminal:我心中 SSH 客户端的终极形态
java·后端·程序员
道友可好2 小时前
用 Linter 驾驭 AI:机械化执行的艺术
前端·人工智能·后端
可乐ea2 小时前
【Spring Boot + MyBatis|第4篇】MyBatis 动态 SQL:if、where、foreach 使用详解
java·spring boot·后端·sql·mybatis