深入学习 redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 类型扩展

news/2025/1/3 6:08:04/

目录

前言

Stream

geospatial

HyperLogLog

Bitmaps

Bitfields


前言


redis 中最关键的五个数据类型 String、List、Hash、Set、Zset 应用最广泛,同时 redis 也推出了额外的 5 个数据类型,他们分别是针对特殊场景才进行的应用的.

 

Ps:这几种类型的具体使用不用记,记你也记不住,因为不常用,因此我们只需要了解其对应的应用场景,需要的时候去官方文档一查就清楚了~

Stream


Stream 就是一个阻塞队列,是 redis 作为消息队列的重要支撑,属于是 List 的 blpop / brpop 的升级版本.

Stream 类型,按照官方文档的意思,就是用来模拟实现事件传播机制~  

事件是什么?例如以下两个场景:

  1. epoll / io 多路复用:每次网卡 / socket 上有可读可写的数据,都会通过这种事件回调的机制来通知到咱们的应用程序代码.
  2. JS:点击事件、键盘事件、窗口大小改变 / 位置改变事件.

简单来讲,就是有些操作,我们也不知道什么时候出现,只能等这个事件出现之后,再采取动作.

geospatial


 用来存储坐标,就是经纬度的.

存储了一些点之后,就可以让用户给定一个坐标,去刚才存储的点中查找(按照半径,矩形区域...),这个功能在 “地图” 应用中非常重要~

 

HyperLogLog


应用场景只有一个,就是用来估算集合中元素的个数.

Set 有一个应用场景就是统计 UV(多少个不同用户进行了访问) ,但问题在于一旦数据非常大,Set 就会消耗很多的内存空间~

假设 Set 存储 userId,每个按照 8 字节计算,1亿 UV = 8 亿字节,相当于 800 MB,而使用 HyperLogLog 最多会使用 12KB 的空间.

Ps:HyperLogLog 不存储元素的内容,但是能够记录 “元素的特征”(具体实现,看源码才知道,核心思路是“位操作”),从而在新增元素的时候,能够知道新增元素,是一个存在的元素,还是一个新元素~

因此,HyperLogLog 只用来计数(记录当前集合有多少个不同的元素 => 多少个不同用户访问了你这个服务器),但是不能告诉你这些元素是啥~

Bitmaps


 使用 bit 位来表示整数,存储的底层数据结构式位图~

位图的本质还是一个集合,属于式 Set 类型针对整数优化的特殊版本(节省空间)

对比 HyperLogLog:

HyperLogLog 既可以存储数字也可以存储字符串,但是不存储元素内容,只是计数效果,因此 hyperloglog 存储元素,提取特征的过程是不可逆的(信息丢失),例如给你个猪肉,可以做成火腿肠,但是给你火腿肠是还原不回猪肉的。

Bitfields

 

bitfields 和 C 语言中的位域是很相似的~

bitfield 可以理解成一串二进制序列(字节数组),同时可以把这个字节数组中的几个位,赋予特殊的含义,并可以进行 读取/修改/算数运算 等操作.

位域相比较 String / hash 来说,目的是为了节省空间.

使用场景就是游戏中的杀怪计数:

 

 


http://www.ppmy.cn/news/984134.html

相关文章

【自动话化运维】Ansible常见模块的运用

目录 一、Ansible简介二、Ansible安装部署2.1环境准备 三、ansible 命令行模块3.1.command 模块3.2.shell 模块3.3.cron 模块3.4.user 模块3.5.group 模块3.6.copy 模块3.7.file 模块8&#xff…

【CMake保姆级教程】CMake图文安装教程

文章目录 一、CMake概况二、安装Ubuntu CMake三、简单的CMake实验如何使用CMake测试代码执行CMake 总结 一、CMake概况 CMake 是一个项目构建工具,并且是跨平台的。关于项目构建我们所熟知的还有Makefile(通过 make 命令进行项目的构建)&…

[SQL挖掘机] - 左连接: left join

介绍: 左连接是一种多表连接方式,它以左侧的表为基础,并返回满足连接条件的匹配行以及左侧表中的所有行,即使右侧的表中没有匹配的行。左连接将左表的每一行与右表进行比较,并根据连接条件返回结果集。 左连接的工作原理如下&am…

如何运用R语言进行Meta分析与【文献计量分析、贝叶斯、机器学习等】多技术融合实践与拓展

Meta分析是针对某一科研问题,根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法,对来源不同的研究成果进行收集、合并及定量统计分析的方法,最早出现于“循证医学”,现已广泛应用于农林生态,资源环境等方面。…

go语言中defer执行顺序

defer 执行顺序和调用顺序相反,类似于栈后进先出。 defer在 return 之后执行,但在函数推出之前,defer可以修改返回值。 func test() int {i : 0defer func() {fmt.Println("defer1")}()defer func() {i 1fmt.Println("defe…

k8s exam

Pause 容器是 Pod 中的第一个启动的容器,其他所有的用户容器都是其子进程当 Pod 被从节点中删除时,与之关联的 emptyDir 中的数据也将被永久删除。持久存储用PV,PVCService 资源定义了如何访问应用,但实际的网络流量管理和路由是由…

结构型-外观模式(Facade Pattern)

概述 外观模式是一种结构型设计模式,它提供了一个统一的接口,用于访问子系统中的一组接口。通过在外观类中定义一个高层接口,外观模式隐藏了子系统的复杂性,并将客户端与子系统的内部逻辑解耦。 优点: 简化了客户端…

11-2_Qt 5.9 C++开发指南_QSqlQueryModel的使用(QSqlQueryModel 只能作为只读数据源使用,不可以编辑数据)

文章目录 1 QSqlQueryModel 功能概述2 使用 QSqlQueryModel 实现数据查询2.1 实例功能2.2 可视化UI设计2.3 主窗口类定义(去除自动生成的槽函数)2.4 打开数据库2.5 记录移动 1 QSqlQueryModel 功能概述 从下图中可以看到,QSqlQueryModel 是 …