redis - geo,bitmap,HyperLogLog的使用

135 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第11天,点击查看活动详情

redis

redis 还可以使用geo肝功能来记录地理位置信息,使用bitmap做位图来存储更省空间的信息。也可以做布隆过滤器,还有HyperLogLog来做统计功能

geo

geo用于地理信息 没有删除api type类型是zset

  • geoadd key longitude latitude element... 添加key 经纬度坐标和地名
  • geopos key element ... 获取地名的经纬度
  • geodist key element element [unit] 获取两个地名的距离,unit可以是千米,米等单位
  • georadius key longitude latitude ...

使用场景

用于存储地理位置信息,存在内存中快速计算,返回等。

bitmap

位图,位图的type类型是string。

  • setbit key index bit 设置key的index位置的bit,bit为0或1
  • getbit key index 获取key的index位置的bit
  • bitcount key 获取key中1的数量
  • bitop op destkey key key 对两个key做并集或交集,结果存在destkey
  • bitpos key bit 获取key中bit出现的第一个位置

使用场景

位图的占用空间更小,是二进制数据。可以方便操控二进制。 比如实现布隆过滤器,实现二进制唯一id算法等。

HyperLogLog

极小空间完成独立数量统计,用来计算基数,也就是key中不重复元素的数量。比如{1,2,3,4,5,5,5},那么不重复的元素数量就是{1,2,3,4,5},基数就是5,也就是pfcount key的计算结果。 有错误率(错误率:0.81%) 取不了数据,只能统计. type数据类型是string

  • pfadd key element ... 往key中插入元素
  • pfcount key ... 计算key中的元素数量,重复的不计算
  • pfmerge destkey key key 合并两个key,存在destkey中

使用场景

统计信息,比如统计每月有多少用户登录了。 只要是统计类,并且需要不重复的数量就可以使用这个。 其实zset也可以,但是这个占用空间极小。百万数据的统计也就是几十kb的空间占用。