【Redis】数据类型补充

发布于:2025-06-02 ⋅ 阅读:(23) ⋅ 点赞:(0)

一、Streams(流)

特性

  • 有序消息队列:基于日志的持久化数据结构,支持多生产者、多消费者模式,保证消息的顺序性和可靠性。
  • 持久化存储:消息会持久化到磁盘,支持数据恢复。
  • 消费者组:多个消费者可以组成一个组,共同消费消息,避免重复处理。
  • 消息回溯:支持通过索引(如时间戳)回溯历史消息。

应用场景

  • 实时消息系统(如聊天记录、活动日志)。
  • 微服务架构中的事件驱动通信。
  • 日志采集与分析。

典型操作

命令 说明
XADD key [NX/XX] [CHAINID] field value [field value ...] 向流中添加新消息,NX 表示仅当键不存在时创建,XX 表示仅当键存在时添加
XLEN key 获取流中消息的数量
XREAD STREAMS key [STREAMS ...] ID [ID ...] 按指定 ID 读取流中的消息(单消费者模式)
XGROUP CREATE key groupname ID [MKSTREAM] 创建消费者组,ID 为起始消费位置(如 $ 表示最新消息)
XREADGROUP GROUP groupname consumer [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] ID [ID ...] 消费者组内的消费者读取消息(支持阻塞模式)
XACK key groupname message-id [message-id ...] 确认消息已处理,标记为完成

二、Geospatial(地理空间)

特性

  • 地理位置存储:用于存储地理位置坐标(经度、纬度),支持距离计算、范围查询等操作。
  • 底层实现:基于 ZSET(有序集合) 实现,每个地理位置点对应一个成员,分值为经纬度的有序排列。
  • 精度控制:支持米级精度的距离计算和范围查询。

应用场景

  • 附近的人、附近的商家等 LBS 功能。
  • 物流轨迹追踪、地理围栏检测。

典型操作

命令 说明
GEOADD key longitude latitude member [longitude latitude member ...] 向键中添加地理位置点(经度、纬度、成员名)
GEOPOS key member [member ...] 获取成员的坐标
GEODIST key member1 member2 [unit] 计算两个成员之间的距离(unit 支持 mkmmift
GEORADIUS key longitude latitude radius unit [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] 以给定坐标为中心,查询指定半径内的成员(支持返回距离、坐标等)
GEORADIUSBYMEMBER key member radius unit [参数...] 以指定成员为中心,查询指定半径内的成员

三、HyperLogLog(基数统计)

特性

  • 基数估算:用于统计独立元素的数量(基数),例如统计 UV(独立访客数)。
  • 内存高效:无论基数多大,每个 HyperLogLog 仅占用约 12KB 内存,牺牲一定精度换取空间效率。
  • 概率算法:基于 HyperLogLog 算法,误差率约为 0.81%,适合不需要精确统计的场景。

应用场景

  • 统计网站日活(UV)、月活用户数。
  • 检测重复元素(如垃圾邮件 IP 地址统计)。

典型操作

命令 说明
PFADD key element [element ...] 向 HyperLogLog 中添加元素
PFCOUNT key [key ...] 返回 HyperLogLog 的基数估算值
PFMERGE destkey sourcekey [sourcekey ...] 合并多个 HyperLogLog 到目标键中

四、Bitmaps(位图)

特性

  • 位操作:基于字符串类型实现,每个字符(8 位)对应一个二进制位,用于高效存储布尔值(0/1)。
  • 内存高效:存储百万级布尔值仅需约 125KB 内存(100万位 ≈ 125KB)。
  • 支持按位操作:如 AND、OR、NOT、XOR 等逻辑运算,以及统计二进制位中 1 的数量(BITCOUNT)。

应用场景

  • 用户签到系统(每日对应一个位,1 表示签到,0 表示未签到)。
  • 状态标记(如用户是否在线、任务是否完成)。
  • 布隆过滤器(结合多个 Bitmaps 实现去重过滤)。

典型操作

命令 说明
SETBIT key offset value 设置指定偏移量(offset)的位值(0 或 1)
GETBIT key offset 获取指定偏移量的位值
BITCOUNT key [start end] 统计指定范围内(以字节为单位)1 的数量
BITOP operation destkey key [key ...] 对一个或多个键执行位运算(operation 可选 ANDORNOTXOR

五、BitFields(位域)

特性

  • 精细化位操作:在 Bitmaps 的基础上,支持对二进制位进行分组(域),直接操作指定长度的位域。
  • 多域操作:一个键中可定义多个位域,每个域有独立的偏移量和长度。
  • 原子性:支持对多个位域进行原子性读取和修改。

应用场景

  • 存储结构化的二进制数据(如协议字段、状态标志)。
  • 高效压缩存储枚举值(如用户角色、状态码)。

典型操作

命令 说明
BF.SET key field value [OVERFLOW WRAP FAIL SATURATE] 设置指定位域的值,OVERFLOW 处理溢出策略
BF.GET key field 获取指定位域的值
BF.INFO key 获取键的位域定义信息
BF.INCRBY key field increment [OVERFLOW ...] 对指定位域的值进行原子递增/递减
BF.GET_RO key [field ...] 原子性读取多个位域的值(只读模式)

总结

数据类型 核心功能 典型场景 内存特点
Streams 有序消息队列、消费者组 实时日志、消息系统 持久化,按消息量存储
Geospatial 地理位置存储与查询 LBS 服务、附近功能 基于 ZSET,按成员数存储
HyperLogLog 基数估算(去重统计) UV 统计、重复检测 固定 12KB/键,低精度
Bitmaps 位级存储与统计 签到系统、状态标记 按位存储,超高效
BitFields 精细化位域操作 结构化二进制数据、枚举压缩 按位域定义存储,灵活

网站公告

今日签到

点亮在社区的每一天
去签到