目录
2. Bitmaps(可以称为字符串,专门进行位操作的字符串)
2.4 bitcount(统计字符串被设置为1的bit数,访问过的用户为1,没有访问过的为0)
2.5 bitop(复合操作,将多种情况的操作结果保存在destkey中)
3.2 pfadd(添加指定元素到HyperLogLog中)
4.5 georadius(以给定的经纬度为中心,找出某一半径内的元素)
1. 介绍
在Redis 6中,有几种比较特殊且功能强大的数据结构:Bitmaps(位图)、HyperLogLog(超级对数日志)、Geospatial(地理空间)
1. Bitmaps(位图):
- 作用:Bitmaps 是 Redis 中的一种非常紧凑和高效的数据结构,用来处理位操作相关的需求。
- 用途:主要用于记录某些状态或者事件是否发生过,例如用户是否点击过某个按钮、某天是否有用户访问网站等。因为它可以节省大量内存,特别适合于需要高效率地记录大量布尔型状态的场景。
2. HyperLogLog(超级对数日志):
- 作用:HyperLogLog 是一种概率性数据结构,用于统计元素的基数(唯一元素的数量),占用固定大小的内存空间。
- 用途:适合于需要快速估计大数据集合中的唯一元素数量,例如统计网站的独立访客数、统计一周内不同IP地址访问网站的数量等。
3. Geospatial(地理空间):
- 作用:Geospatial 是 Redis 提供的一种处理地理位置和坐标的数据结构,可以存储地理位置的经度和纬度,并支持相关的地理位置查询操作。
- 用途:适合于需要存储和查询地理位置信息的应用场景,如附近的商家搜索、地点推荐等。
2. Bitmaps(可以称为字符串,专门进行位操作的字符串)
2.1 概念
- Bitmaps本身不是数据类型,他只是字符串,专门进行位操作的字符串;
Bitmaps与set的区别:
提高了空间利用率,提高了cpu内存的利用率;
对比 set
和 Bitmaps
在存储独立用户空间方面的差异:
set
和Bitmaps
存储独立用户空间对比
数据类型 | 一天 | 一个月 | 一年 |
---|---|---|---|
set |
400MB | 12GB | 144GB |
Bitmaps |
12.5MB | 375MB | 4.5GB |
- 备注
Bitmaps
并不是万能的。如果网站每天的独立访问用户很少(例如只有 10 万,大量的僵尸用户),则对比情况如下。Bitmaps
在用户数量少的情况下不太适合,因为这时候大部分位都是0
,使其不太高效。
2.2 setbit(设置Bitmaps中某个偏移量的值)
SETBIT
命令用于设置 Bitmaps 中某个偏移量的值,可以将指定位置的位设置为 0 或 1;<key>
: Bitmaps 的键<offset>
: 偏移量,从 0 开始<value>
: 设置的值,只能是 0 或 1
SETBIT <key> <offset> <value>
# 设置键 `userbitmap` 在偏移量 5 处的位值为 1
127.0.0.1:6379> SETBIT userbitmap 5 1
(integer) 0
# 设置键 `userbitmap` 在偏移量 10 处的位值为 1
127.0.0.1:6379> SETBIT userbitmap 10 1
(integer) 0
# 设置键 `userbitmap` 在偏移量 5 处的位值为 0
127.0.0.1:6379> SETBIT userbitmap 5 0
(integer) 1
2.3 getbit(获取Bitmaps中某个偏移量的值)
GETBIT
命令用于获取 Bitmaps 中某个偏移量的值,返回该位的值(0 或 1);<key>
: Bitmaps 的键<offset>
: 偏移量,从 0 开始
GETBIT <key> <offset>
# 获取键 `userbitmap` 在偏移量 5 处的位值
127.0.0.1:6379> GETBIT userbitmap 5
(integer) 0
# 获取键 `userbitmap` 在偏移量 10 处的位值
127.0.0.1:6379> GETBIT userbitmap 10
(integer) 1
# 获取键 `userbitmap` 在偏移量 15 处的位值
127.0.0.1:6379> GETBIT userbitmap 15
(integer) 0
2.4 bitcount(统计字符串被设置为1的bit数,访问过的用户为1,没有访问过的为0)
BITCOUNT
命令用于统计 Bitmaps 中被设置为 1 的位的数量。该命令可以统计整个 Bitmaps 的 1 位数,也可以通过指定start
和end
参数来统计特定范围内的 1 位数;<key>
: Bitmaps 的键[start]
(可选): 开始的字节下标,负数表示从末尾开始计算[end]
(可选): 结束的字节下标,负数表示从末尾开始计算
BITCOUNT <key> [start end]
# 统计键 `userbitmap` 中所有被设置为 1 的位的数量
127.0.0.1:6379> BITCOUNT userbitmap
(integer) 2
# 统计键 `userbitmap` 在字节 0 到字节 1 范围内被设置为 1 的位的数量
127.0.0.1:6379&