当前位置: 首页 > news >正文

【Redis】数据类型补充

一、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精细化位域操作结构化二进制数据、枚举压缩按位域定义存储,灵活

相关文章:

  • [GESP202412 五级] 奇妙数字
  • 017搜索之深度优先DFS——算法备赛
  • 任务23:创建天气信息大屏Django项目
  • 【火山引擎 大模型批量推理数据教程---详细讲解一篇过!】
  • 文言文停词库 | 古文停词库 | 624个简体停词 |文言文python分词库-thulac
  • OS10.【Linux】yum命令
  • PCB制作入门
  • 财管-0-战略和战略管理
  • 最大子数组和问题详解
  • nc 命令示例
  • Python训练第四十一天
  • LeRobot ACT——LeRobot对ALOHA ACT策略的封装:含源码解析与真机部署(效果比肩ACT原论文)
  • 上位机知识篇---直接无线数据通信
  • Broker、Proxy、Agent的区别
  • 哈尔滨工业大学提出ADSUNet—红外暗弱小目标邻帧检测新框架
  • Parametric Retrieval Augmented Generation
  • 每日八股文6.1
  • 6v6-导航收录:2025年网站自动引流终极方案 - 提升SEO排名新策略
  • win11回收站中出现:查看回收站中是否有以下项: WPS云盘回收站
  • springboot-响应接收与ioc容器控制反转、Di依赖注入
  • 新农村建设网站/百度seo技术优化
  • 做哪个网站的直播好/seo资源是什么意思
  • 网站设计建设公司/网络营销的策略有哪些
  • 网站制作网免费/百度指数关键词搜索趋势
  • 黑苹果做网站开发/深圳哪里有网络推广渠避
  • 政府蒙古文网站建设汇报材料/公司业务推广