1. BitMap(位图)
特点:
- 位操作的支持。
- 本质是操作字符串的二进制位(bit)。
- 节省存储空间,适合存储大量布尔值状态。
常用场景
- 用户签到功能。
- 大规模状态标记(如是否在线、某日是否活跃)。
- 布尔值的批量存储和查询。
常用命令
-
设置和获取位
SETBIT key offset value # 设置某个位的值 (0 或 1) GETBIT key offset # 获取某个位的值 -
统计位为 1 的数量
BITCOUNT key [start end] # 统计值为 1 的位数 -
按位操作
BITOP op destKey key1 [key2 ...] # 对多个键进行位操作(AND、OR、XOR、NOT) -
示例
用户每天签到,使用位图记录:SETBIT user:1001:sign 1 1 # 记录用户第2天签到 SETBIT user:1001:sign 3 1 # 记录用户第4天签到 BITCOUNT user:1001:sign # 统计总签到天数
2. HyperLogLog
特点:
- 基于概率算法的去重计数器,可以估算基数(去重后元素数量)。
- 占用空间固定(~12KB),无论存储多少数据。
- 不支持具体数据存储,仅返回近似基数。
常用场景
- 网站 UV 统计。
- 大规模数据去重统计。
常用命令
-
添加元素
PFADD key element1 element2 ... # 向 HyperLogLog 添加元素 -
获取基数
PFCOUNT key [key2 ...] # 获取去重后的基数 -
合并多个 HyperLogLog
PFMERGE destKey key1 key2 ... # 合并多个 HyperLogLog -
示例
统计某日的访问用户数:PFADD visits:20241210 user1 user2 user3 PFADD visits:20241210 user2 user4 PFCOUNT visits:20241210 # 返回去重后的用户数量(约等于 4)
3. GEO(地理位置数据)
特点:
- 用于存储地理位置信息(经纬度)及操作。
- 支持位置添加、距离计算、范围查询等。
常用场景
- LBS(基于位置的服务),如附近商店、用户查找。
- 位置排名或距离统计。
常用命令
-
添加地理位置
GEOADD key longitude latitude member # 添加地理位置 -
获取地理位置
GEOPOS key member1 [member2 ...] # 获取指定成员的经纬度 -
计算距离
GEODIST key member1 member2 [unit] # 计算两个位置之间的距离(默认单位:米) -
范围查询
GEORADIUS key longitude latitude radius [unit] [WITHDIST WITHCOORD ASC|DESC COUNT count] GEORADIUSBYMEMBER key member radius [unit] [WITHDIST WITHCOORD ASC|DESC COUNT count] -
示例
商店位置管理:GEOADD stores 116.397128 39.916527 "StoreA" # 北京位置 GEOADD stores 121.473701 31.230416 "StoreB" # 上海位置 GEODIST stores "StoreA" "StoreB" km # 计算两地距离(单位:公里) GEORADIUS stores 121.473701 31.230416 100 km WITHDIST # 查找上海100公里范围内的商店
4. Stream(流)
特点:
- 用于日志流、消息队列等数据流的存储和管理。
- 支持消费者分组、阻塞读取。
- 类似 Kafka 的轻量级实现。
常用场景
- 实现生产者-消费者模式。
- 日志和事件系统。
- 实时消息处理。
常用命令
-
添加数据
XADD key [MAXLEN ~ count] * field1 value1 [field2 value2 ...] # 向流中添加条目 -
读取数据
XRANGE key start end [COUNT count] # 按范围读取数据 XREAD COUNT count STREAMS key [key2 ...] id [id2 ...] # 从流中读取数据 -
消费者组管理
XGROUP CREATE key groupname id # 创建消费者组 XREADGROUP GROUP groupname consumername COUNT count STREAMS key id -
示例
消息队列:XADD mystream * sensor_id 1234 temperature 19.8 XRANGE mystream - + COUNT 10 # 获取最新10条消息 XGROUP CREATE mystream mygroup $ # 创建消费者组 XREADGROUP GROUP mygroup consumer1 STREAMS mystream > # 消费数据
总结
| 类型 | 特点 | 常用场景 | 关键命令 |
|---|---|---|---|
| BitMap | 位操作,节省空间,布尔值存储 | 签到、状态标记 | SETBIT, GETBIT, BITCOUNT, BITOP |
| HyperLogLog | 基于概率算法的基数统计,空间固定 | UV统计、大规模去重 | PFADD, PFCOUNT, PFMERGE |
| GEO | 地理位置存储与计算 | LBS、附近查询 | GEOADD, GEODIST, GEORADIUS |
| Stream | 日志流、消息队列,支持消费者分组 | 实时消息处理、事件存储 | XADD, XRANGE, XGROUP, XREADGROUP |
这些高级数据类型增强了 Redis 在特殊业务场景中的适用性,进一步提升了其在大规模、高并发场景下的灵活性与性能。
1067

被折叠的 条评论
为什么被折叠?



