【Redis】类型补充

类型补充

一. Streams

Streams:流,用于实现高效的消息队列和实时数据流处理,也可以用来模拟实现事件传播的机制。

  • 事件:IO 多路复用,每次 网卡/socket 上有可读可写的数据都会通过事件回调机制来通知到我们的应用程序代码。
  • Streams 就是一个队列 (阻塞队列),是 Redis 作为一个消息队列的重要支撑,属于是 list 的 blpop/brpop 的升级版本。

命令:xadd、xread、xrange、xlen

这个数据结构用的不多,需要用时,查找文档即可。

二. Geospatial

Geospatial:地理空间,用来存储坐标 (经纬度),存储一些点后,就可以让用户给定一个坐标,取刚才存储的点里进行查找 (按照半径,矩形区域...),这个功能在地图中非常重要。

  • Geospatial 拥有高效存储和查询、和丰富的地理操作。
  • 应用场景:位置跟踪、附近搜索。

命令:geoadd、getpos、geodist、georadius

  • geoadd:添加元素的地理位置。
  • 语法:geoadd key longitude latitude member [longitude latitude member ...]
  • getpos:查找元素的地理位置。
  • 语法:geopos key member [member ...]
  • geodist:计算两个元素地理位置之间的距离。
  • 语法:geodist key member1 member2 [m|km|ft|mi]
  • georadius:查询指定半径内的地理位置。
  • 语法:georadius key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC]

三. HyperLogLog

HyperLogLog:基数统计,使用少量内存的情况下,统计集合中不重复元素的数量,但是存在 0.81% 的误差。

  • set 有一个应用场景是,统计服务器的 UV (用户访问次数),其中最大的问题是,如果 UV 数据量非常大 (这里取 1 亿),set 就会消耗很多的内存空间,假设 set 存储 userId,每个 userId 按照 8 个字节计算,1 亿 UV 等于 8 亿字节,也就是 0.8 GB,也就是 800 MB
  • 而使用 HyperLogLog,只需要 12KB 的内存,就可以处理任意数量的输入,并且可以处理的数量是巨大的,达到 2^64 数量级。
  • 之所以 set 要消耗这么大的空间,因为 set 需要存储每一个元素,而 HyperLogLog 不存储元素的内容,但是能够记录 "元素的特征",从而在新增元素的时候,能够知道当前新增的元素,是已经存在的元素,还是第一次出现的元素。
  • HyperLogLog 只是用于计数,记录当前集合中存在多少个不同的元素,而不能告诉你这些元素都是什么,无论是插入元素还是查询元素的个数,时间复杂度都是 O(1)

命令:pfadd、pfcount、pfmerge

  • pfadd:向集合中添加元素
  • 语法:pfadd key element [element ...]
  • 时间复杂度:O(1)
  • pfcount:求集合中不相同的元素个数。
  • 语法:pfcount key [key ...]
  • 时间复杂度:O(1)
  • pfmerge:合并集合中的元素个数,存储在目标集合中。
  • 语法:pfmerge destkey sourcekey [sourcekey ...]

四. Bitmaps

Bitmaps:使用少量内存的情况下,统计某个整数是否出现。

  • HyperLogLog 更加节省空间,既可以存储数值,也可以存储字符串,但是不会存储元素的内容,只是起到计数的效果,存储数据的时候是不可逆的 (信息丢失)
  • Bitmaps 会存储整数,设置和获取的时间复杂度是 O(1)

命令:setbit、getbit、bitop、bitcount

  • setbit:设置位图某个偏移量的值。
  • 语法:setbit key offset value
  • 时间复杂度:O(1)
  • getbit:获取位图中某个偏移量的值。
  • 语法:getbit key offset
  • 时间复杂度:O(1)
  • 返回值:位图中某个偏移量的值。
  • bitop:将位图之间按位操作,存储在目标位图中。
  • 语法:bitop operation destkey key [key ...]
    • 其中的 operation 存在四种:or、and、xor、not;




  • bitcount:统计位图中某个偏移量区间中被设置为 1 的个数。
  • 语法:bitcount key [start end]

五. Bitfields

Bitfields:位域也叫位段,本质上是让我们精确进行位操作的一种方法。

  • 上述 Redis 中的 Bitfields 与 C语言 中的位段,非常类似,Bitfields 可以理解成一串二进制序列 (字节数组),同时可以把这个字节数组中的某几个位,赋予特定的含义,并且可以进行 读取/修改/算数运算 相关操作,仍然是为了节省空间。

命令:bitfield

  • 语法:bitfield key GET type offset SET type offset value INCRBY type offset increment OVERFLOW WRAP\|SAT\|FAIL
    • bitfield key set type offset value:设置位域中的某个偏移量,为某个类型并赋值。
    • bitfield key get type offset:获取位域中的某个偏移量,中的某个类型的值。
    • bitfield key incrby type offset increment:位域中的某个偏移量,某个类型的值进行加减运算。
  • 时间复杂度:O(1)
相关推荐
福大大架构师每日一题28 分钟前
Redis 8.10.0 正式发布:紧凑哈希、批量导入、备份恢复、流与时序能力全面升级
数据库·redis·哈希算法
雨晨源码(同名B站)1 小时前
基于深度学习YoloV11农业病害虫害检测系统 智慧农业信息化综合管理平台 (附源码+lw文档+ppt)
数据库·人工智能·深度学习·yolo·信息可视化
DBA小马哥2 小时前
向量数据库入门到进阶:Embedding、ANN算法与RAG落地的关键术语
数据库·算法·embedding
云和数据.ChenGuang2 小时前
fastapi项目拆分实战数据模型
java·服务器·数据库·人工智能·深度学习·fastapi·强化学习
祈禾2 小时前
Redis三大特殊数据类型
运维·服务器·数据库·redis·笔记·缓存
东方护航数据恢复(深圳)2 小时前
MySQL_Oracle数据库崩溃修复全攻略_东方护航数据恢复深圳店
数据库·mysql·oracle
孙启超3 小时前
【AI应用开发】什么是混合检索(Hybrid Search)?向量检索 + BM25 关键词检索,适用场景与 RRF 融合原理
人工智能·缓存·llm·向量数据库·bm25·向量化·ai应用开发
y = xⁿ3 小时前
一文掌握Redis常见八股
数据库·redis·缓存
Cloud云卷云舒3 小时前
HaishanDB(海山)|磐维数据库|YashanDB(崖山)深度对比分析
数据库·人工智能·海山数据库·haishandb·移动云海山数据库
weixin_460443563 小时前
企业考试系统如何对接OA、钉钉和企业微信?SSO单点登录、组织同步与权限一致性设计
java·开发语言·数据库