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

【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精细化位域操作结构化二进制数据、枚举压缩按位域定义存储,灵活
http://www.xdnf.cn/news/10334.html

相关文章:

  • t018-高校宣讲会管理系统 【含源码!】
  • 浅谈简历制作的四点注意事项
  • NLP学习路线图(十四):词袋模型(Bag of Words)
  • Go语言中的数据类型转换
  • 数据结构之ArrayList
  • 【 SpringCloud | 微服务 网关 】
  • CppCon 2014 学习:Unicode in C++
  • win10手动调整日期和时间
  • ​​技术深度解析:《鸿蒙5.0+:无感续航的智能魔法》​
  • Java基本数据类型、抽象类和接口、枚举、时间类、String类全面介绍
  • 【PhysUnits】15.7 引入P1后的加法运算(add.rs)
  • 【赵渝强老师】OceanBase部署工具
  • buuctf-web
  • 计算机基础——宏病毒防御与网络技术
  • MacroDroid安卓版:自动化操作,让生活更智能
  • Ubuntu取消开机用户自动登录
  • RuoYi前后端分离框架实现前后端数据传输加密(二)之前端篇
  • 区块链可投会议CCF B--EDBT 2026 截止10.8 附录用率
  • unix/linux source 命令,其基本概念、定义、性质、定理
  • 科技修真的解决方案
  • MyBatis 的 <foreach> 标签中collection 属性
  • JVM学习(七)--JVM性能监控
  • WSL 安装 Debian 12 后,Linux 如何安装 curl , quickjs ?
  • 为什么badmin reconfig以后始终不能提交任务
  • PyTorch——DataLoader的使用
  • 第6节 Node.js 回调函数
  • iOS —— UI 初探
  • slider滑块async await
  • 使用BERT/BiLSTM + CRF 模型进行NER进展记录~
  • LangChain-结合GLM+SQL+函数调用实现数据库查询(三)