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 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 常用于以下场景: