【redis】streams、geospatial、HyperLogLog、bitmaps、bitfields类型
streams此类型,可以用来模仿实现“事件传播”的机制
什么是事件?有些操纵,我们也不知道它什么时间出现,只能等这个事情出现了之,再采取行动
[*]比如,一旦着火了,就立刻使用灭火器灭火
[*]此处的“着火”就是“事件“,“使用灭火器”就是“事件触发的回调函数”
现在我们准备好了 stream,有事件产生了,我们就把这个事件当做一个元素,插入到这个 stream 内里。同时另有一些消耗者在这里监听这个 stream,一旦有事件来了,消耗者就感知到了,就立刻采取动作
stream 就是一个队列(阻塞队列)。redis 作为一个消息队列的重要支持,属于是 list 内里 blpop/brpop 升级版本
基本命令
[*]XADD:往 stream 内里插入元素
[*]XREAD:从 stream 内里取元素
[*]XRANGE:展示 stream 内里的元素
[*]XLEN:获取 stream 内里的元素个数
geospatial
(地理空间的)
用来存储坐标(经纬度)
存储一些点之后,就可以让用户给定一个坐标,去从刚才存储的点里进行查找(按照半径,矩形区域…)
[*]在舆图范畴非常重要 https://i-blog.csdnimg.cn/img_convert/b4afffc94c5fcc17919786f50c52967b.png
基本命令
[*]GEOADD:添加位置坐标
[*]GEOSEARCH:在给定的范围内里进行查找
HyperLogLog
应用场景只有一个:估算集合中的元素个数
set 有一个应用场景,统计服务器的 UV(用户访问的次数)
[*]使用 set 固然可以统计 UV,但是最大的问题在于:如果 UV 数据量非常大,set 就会斲丧很多的内存空间
[*]假设 set 存储 userId,每个 userId 按照 8 个字节算。1 亿 UV >8 亿字节>0.8GBHyperLogLog` 可以最多使用 12 KB 的空间,实现上述效果
之所以 set 要斲丧这么大的空间,是因为 set 必要存储每个元素。而 HyperLogLog 不存储元素的内容,但是能够记载“元素的特性”,从而在新增元素的时间,能够知道当前新增的元素,是一个已经存在的元素,照旧一个第一次出现的元素
[*]HyperLogLog 用来计数(记载出当前集合中有多少个不同的元素),但是不能告诉你这些元素都是什么
HyperLogLog 存储元素的时间,提前特性的过程是不可逆的(信息量丢失了)
[*]给你猪肉,可以做成火腿肠
[*]但是给你火腿肠,不能还原成猪肉了
bitmaps
(位图)
使用 bit 位来表现整数
位图本质上,就照旧一个集合,属于是 set 类型针对整数的特化版本
[*]为了节省空间
[*]盘算机进行位操纵,一般都是比较高效的
HyperLogLog 固然更省空间,但是它只计数,不存储元素内容,而 bitmap 存储元素
bitfields
(位域)
可以理解成一串二进制序列(字节数组),同时可以吧这个字节数组中的某几个位赋予特定的含义,并且可以进行读取/修改/算术运算相干操纵
[*]相比与之前的 string/hash 来说,照旧节省了空间
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]