⌛ 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. 计数器:用于计数,如文章的阅读量等。
相关推荐
Code apprenticeship44 分钟前
怎么利用Redis实现延时队列?
数据库·redis·缓存
百度智能云技术站1 小时前
广告投放系统成本降低 70%+,基于 Redis 容量型数据库 PegaDB 的方案设计和业务实践
数据库·redis·oracle
装不满的克莱因瓶1 小时前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb
AskHarries2 小时前
Spring Cloud OpenFeign快速入门demo
spring boot·后端
isolusion3 小时前
Springboot的创建方式
java·spring boot·后端
zjw_rp3 小时前
Spring-AOP
java·后端·spring·spring-aop
TodoCoder3 小时前
【编程思想】CopyOnWrite是如何解决高并发场景中的读写瓶颈?
java·后端·面试
凌虚4 小时前
Kubernetes APF(API 优先级和公平调度)简介
后端·程序员·kubernetes
黄名富5 小时前
Redis 附加功能(二)— 自动过期、流水线与事务及Lua脚本
java·数据库·redis·lua
机器之心5 小时前
图学习新突破:一个统一框架连接空域和频域
人工智能·后端