Redis中的Bitmaps、HyperLogLog、GEO

一、Bitmaps:

位图:用一个bit位的状态来表示某个数据的是否已经存在。

基本操作:

//	offset:偏移量,从0开始  value:只能为0/1
setbit  key  offset  value

getbit  key  offset

//	获取当前位图数组中,指定下标范围内,值为1的个数
bitcount key [start]  [end]

位运算操作:

//	对多个位图做位运算。op取值:and,or,not,xor
//	将将位运算的结果放在指定的destkey中
bitop  op destkey  key [key...]

注意:
位图不一定就会适应更少的地内存,以统计某个网站的每天用户访问量为例:

  1. 当用户数较大时,bitmaps相较于set来说能够省去大量的内存空间。但反之如果访问量就几千的话,反而可能浪费更多的空间,因为会存在大量的0标记位。
  2. 使用setbit key offset value时,如果useID的设计较大时(比如分布式ID),不要直接作为offset的值,而是先处理再放入。这里要按照id的设计具体处理。可以采用每个id都减去最小的id作为最后的offset。

二、HyperLogLog:

HyperLogLog可以使用更少的内存来统计不同值的个数。但存在0.81%的失误率,即他统计的数据不是准确的。

基本操作:

//	向HyperLogLog里添加元素,若已存在相同元素则不再进行添加。
pfadd key element[element...]

//	统计目前不同元素的个数
pfcount key

合并操作:

//	合并2个HyperLogLog的元素放在destkey中,返回合并后的不同值的总个数
pfmerge destket sourcekey[sourcekey...]
说明:
bitmaps与HeperLogLog实质是使用String类型实现的。

三、GEO:

在这里插入图片描述
GEO也是不重复的,即一个key中,一个member只能出现一次。当需要修改某个member时,也是使用geoadd命令。

geopos key member 用来获取某个member的经纬度。

geodist key member1 member2 [unit]用来统计两个地点之间的距离:
unit表示返回结果单位:
在这里插入图片描述
获取指定范围内的地理信息位置集合:

//	求以指定经纬度为中心,半径范围内的地理信息
georadius  key  经度  维度  半径+单位

//	求以指定成员为中心,半径范围内的地理信息
georadiusbymember  key  member 半径+单位

对于上面2个命令。同时还提供了很多可选参数:
在这里插入图片描述

注意:
GEO底层存储数据采用的是zset,它把二维的经纬度转换为以为geohash放入zset中。
经纬度与geohash是可以相互转换的。
表示geohash的长度越长,表示的位置越精确。
两个geohash越相似,他们之间的距离越近,Redis采用的是字符串前缀算法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值