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

目录

前言

Stream

geospatial

HyperLogLog

Bitmaps

Bitfields


前言


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

深入学习 redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 类型扩展_第1张图片

 

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

Stream


深入学习 redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 类型扩展_第2张图片

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

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

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

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

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

geospatial


深入学习 redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 类型扩展_第3张图片

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

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

深入学习 redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 类型扩展_第4张图片

 

HyperLogLog


深入学习 redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 类型扩展_第5张图片

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

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

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

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

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

Bitmaps


深入学习 redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 类型扩展_第6张图片

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

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

对比 HyperLogLog:

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

Bitfields

深入学习 redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 类型扩展_第7张图片

 

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

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

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

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

深入学习 redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 类型扩展_第8张图片

 

深入学习 redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 类型扩展_第9张图片

 

你可能感兴趣的:(学习,redis,数据库)