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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值