【redis】streams、geospatial、HyperLogLog、bitmaps、bitfields类型 ...

打印 上一主题 下一主题

主题 1842|帖子 1842|积分 5526

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 来说,照旧节省了空间

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

没腿的鸟

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表