admin管理员组文章数量:1446760
【redis】streams、geospatial、HyperLogLog、bitmaps、bitfields类型
streams
此类型,可以用来模拟实现“事件传播”的机制
什么是事件?有些操作,我们也不知道它什么时候出现,只能等这个事情出现了之,再采取行动
- 比如,一旦着火了,就立即使用灭火器灭火
- 此处的“着火”就是“事件“,“使用灭火器”就是“事件触发的回调函数”
现在我们准备好了
stream
,有事件产生了,我们就把这个事件当做一个元素,插入到这个stream
里面。同时另有一些消费者在这里监听这个stream
,一旦有事件来了,消费者就感知到了,就立刻采取动作
stream
就是一个队列(阻塞队列)。redis
作为一个消息队列的重要支撑,属于是 list
里面 blpop/brpop
升级版本
基本命令
XADD
:往stream
里面插入元素XREAD
:从stream
里面取元素XRANGE
:展示stream
里面的元素XLEN
:获取stream
里面的元素个数
geospatial
(地理空间的)
用来存储坐标(经纬度)
存储一些点之后,就可以让用户给定一个坐标,去从刚才存储的点里进行查找(按照半径,矩形区域…)
- 在地图领域非常重要
基本命令
GEOADD
:添加位置坐标GEOSEARCH
:在给定的范围里面进行查找
HyperLogLog
应用场景只有一个:估算集合中的元素个数
set
有一个应用场景,统计服务器的 UV
(用户访问的次数)
- 使用
set
当然可以统计UV
,但是最大的问题在于:如果UV
数据量非常大,set
就会消耗很多的内存空间 - 假设
set
存储userId
,每个userId
按照 8 个字节算。1 亿UV
>8 亿字节>0.8GB
HyperLogLog` 可以最多使用 12 KB 的空间,实现上述效果
之所以 set
要消耗这么大的空间,是因为 set
需要存储每个元素。而 HyperLogLog
不存储元素的内容,但是能够记录“元素的特征”,从而在新增元素的时候,能够知道当前新增的元素,是一个已经存在的元素,还是一个第一次出现的元素
HyperLogLog
用来计数(记录出当前集合中有多少个不同的元素),但是不能告诉你这些元素都是什么
HyperLogLog
存储元素的时候,提前特征的过程是不可逆的(信息量丢失了)
- 给你猪肉,可以做成火腿肠
- 但是给你火腿肠,不能还原成猪肉了
bitmaps
(位图)
使用 bit
位来表示整数
位图本质上,就还是一个集合,属于是 set
类型针对整数的特化版本
- 为了节省空间
- 计算机进行位操作,一般都是比较高效的
HyperLogLog
虽然更省空间,但是它只计数,不存储元素内容,而bitmap
存储元素
bitfields
(位域)
可以理解成一串二进制序列(字节数组),同时可以吧这个字节数组中的某几个位赋予特定的含义,并且可以进行读取/修改/算术运算相关操作
- 相比与之前的
string/hash
来说,还是节省了空间
本文标签: redisstreamsgeospatialHyperLogLogbitmapsbitfields类型
版权声明:本文标题:【redis】streams、geospatial、HyperLogLog、bitmaps、bitfields类型 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1748267197a2834746.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论