Redis7 十大数据类型介绍及使用
1.1 Redis环境搭建
1.1.1 用虚拟机 VMware Workstation Pro 搭建 centos7
1.1.2 用 FinalShell 连接linux
【成功连接画面】
我们这里使用 Docker+Shell 脚本安装Redis最新版
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 常用于以下场景: