⌛ 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 sourcekey[sourcekey....] (将多个 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. 计数器:用于计数,如文章的阅读量等。
相关推荐
wowocpp1 小时前
spring boot Controller 和 RestController 的区别
java·spring boot·后端
后青春期的诗go1 小时前
基于Rust语言的Rocket框架和Sqlx库开发WebAPI项目记录(二)
开发语言·后端·rust·rocket框架
freellf1 小时前
go语言学习进阶
后端·学习·golang
全栈派森3 小时前
云存储最佳实践
后端·python·程序人生·flask
CircleMouse3 小时前
基于 RedisTemplate 的分页缓存设计
java·开发语言·后端·spring·缓存
獨枭4 小时前
使用 163 邮箱实现 Spring Boot 邮箱验证码登录
java·spring boot·后端
维基框架5 小时前
Spring Boot 封装 MinIO 工具
java·spring boot·后端
秋野酱5 小时前
基于javaweb的SpringBoot酒店管理系统设计与实现(源码+文档+部署讲解)
java·spring boot·后端
☞无能盖世♛逞何英雄☜5 小时前
Flask框架搭建
后端·python·flask
小白学大数据5 小时前
基于Scrapy-Redis的分布式景点数据爬取与热力图生成
javascript·redis·分布式·scrapy