Redis(四)Redis的三种特殊数据类型:GEO、Hyperloglog和Bitmap

前言

Redis有三种特殊的数据格式:GEO存储地理坐标和计算,Hyperloglog用于不重复的基数统计,Bitmap位图用于统计互斥事件。

GEO 的数据结构总共有六个命令

  • geoadd
  • geopos
  • geodist
  • georadius
  • georadiusbymember
  • geohash

Redis GEOADD 命令

说明

 将指定的地理空间位置(纬度、经度、名称)添加到指定的key中。

实例

在任意一个城市经纬度查询网站进行查询获取城市信息,然后我们对其进行操作:

参数:geoadd [key] [longitude(经度)] [latitude(维度)]

geoadd chinaCity 113.27 23.15 GuangZhou

GEOPOS - geo 查询命令

相当于查询geo信息

实例

参数:geopos [key]

GEODIST - 查看坐标之间的举例

距离结果参数:

  • m标识单位为米
  • km标识单位为千米
  • mi标识单位为英里
  • ft标识单位为英尺

实例

  北京到广州的距离:再添加一下北京的坐标:geoadd chinaCity 116.23 40.22 BeiJing

参数:geodist [key] [hashkey(字段)] [hashkey(字段)] 单位(不要也可以,默认米)

返回结果为:"1918.8645"

查询北京到广州的直线距离:1856km 实际差不多

GEORADIUS - 查询半径中的数据

业务背景:获取我附近的人?城市?

实例

参数:geodist [key] [hashkey(字段)] [hashkey(字段)] 单位(不要也可以,默认米)

georadius chinaCity 100 30 2000 km   #以经度100,纬度30 半径2000km的内的城市
georadius chinaCity 100 30 2000 km withdist  #显示城市名称和到中心位置的距离
georadius chinaCity 100 30 2000 km withcoord  #显示符合条件的定位
georadius chinaCity 100 30 2000 km withcoord count 1  #输出指定个数符合条件的

效果分别如下

 

Hyperloglog基数统计

说明

常用于人数统计,比如说多次访问网站的用户,如何统计真实的不重复的访问人数:筛选重复的id——基数统计 【不重复的元素】。

那为什么不用SET呢?因为我们的最终目的不是为了保存id而是计数。如何理解?

比如说2^64个不同id,我们只需要12kb内存,每个id存一个bool即可无需存id字符串,便可知道id是否存在。leetcode常用这种hash算法。

实例

127.0.0.1:6379> pfadd class1 a b c d e
(integer) 0
127.0.0.1:6379> pfcount class1
(integer) 5
127.0.0.1:6379> pfadd class2 f g h i j
(integer) 1
127.0.0.1:6379> pfcount class2
(integer) 5
127.0.0.1:6379> pfmerge class3 class1 class2
OK
127.0.0.1:6379> pfcount class3
(integer) 10
127.0.0.1:6379>

Bitmap

说明

Bitmap就是通过一个bit位来表示某个元素对应的值或者状态。Bitmaps位图操作二进制进行记录,只有0和1两个状态。

比如统计vip和非vip用户,和其它的状态:审批,未审批等,以及打卡,想起了优酷的穷vip注解。。。

以打卡为例:365天中每天为一个Bit,一个字节8bit,只需要几十个字节!

setbit [key] [offset] [value]

getbit [key]

bitcount [key]

举例 

😘如果对你有所帮助点个赞,给点小动力,谢谢啦~ 

补充

补充下zset的用法:

ZADD key score1 member1 [score2 member2]

zset常用命令

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长臂人猿

客官们众筹请博主喝杯奶茶吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值