Redis 四种高级数据类型 BitMap、HyperLogLog、GEO 和 Stream 用法场景

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 在特殊业务场景中的适用性,进一步提升了其在大规模、高并发场景下的灵活性与性能。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值