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

目录

前言

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 来说,目的是为了节省空间.

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

相关推荐
蒸蒸yyyyzwd5 小时前
cpp对象模型学习笔记1.1-2.8
java·笔记·学习
银发控、6 小时前
MySQL联合索引
数据库·mysql
阿蒙Amon6 小时前
TypeScript学习-第7章:泛型(Generic)
javascript·学习·typescript
予枫的编程笔记6 小时前
【MySQL修炼篇】从踩坑到精通:事务隔离级别的3大异常(脏读/幻读/不可重复读)解决方案
数据库·mysql·后端开发·数据库事务·事务隔离级别·rr级别·脏读幻读不可重复读
Hill_HUIL6 小时前
学习日志23-路由高级特性(静态路由)
网络·学习
睡美人的小仙女1276 小时前
Threejs加载环境贴图报错Bad File Format: bad initial token
开发语言·javascript·redis
今儿敲了吗6 小时前
鸿蒙开发第一章学习笔记
笔记·学习·鸿蒙
徐同保6 小时前
解决 Vue 3 项目 TypeScript 编译错误:@types/lodash 类型定义不兼容
redis·网络协议·https
一起养小猫7 小时前
Flutter for OpenHarmony 实战:记账应用数据统计与可视化
开发语言·jvm·数据库·flutter·信息可视化·harmonyos
世界尽头与你7 小时前
(修复方案)CVE-2023-22047: Oracle PeopleSoft Enterprise PeopleTools 未授权访问漏洞
数据库·安全·oracle·渗透测试