天天看点

Redis(四)Redis的三种特殊数据类型:GEO、Hyperloglog和Bitmap前言GEO 的数据结构总共有六个命令

前言

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
           
Redis(四)Redis的三种特殊数据类型:GEO、Hyperloglog和Bitmap前言GEO 的数据结构总共有六个命令

GEOPOS - geo 查询命令

相当于查询geo信息

实例

参数:geopos [key]
Redis(四)Redis的三种特殊数据类型:GEO、Hyperloglog和Bitmap前言GEO 的数据结构总共有六个命令

GEODIST - 查看坐标之间的举例

距离结果参数:

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

实例

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

参数:geodist [key] [hashkey(字段)] [hashkey(字段)] 单位(不要也可以,默认米)
Redis(四)Redis的三种特殊数据类型:GEO、Hyperloglog和Bitmap前言GEO 的数据结构总共有六个命令

返回结果为:"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  #输出指定个数符合条件的
           

效果分别如下

Redis(四)Redis的三种特殊数据类型:GEO、Hyperloglog和Bitmap前言GEO 的数据结构总共有六个命令
Redis(四)Redis的三种特殊数据类型:GEO、Hyperloglog和Bitmap前言GEO 的数据结构总共有六个命令
Redis(四)Redis的三种特殊数据类型:GEO、Hyperloglog和Bitmap前言GEO 的数据结构总共有六个命令
Redis(四)Redis的三种特殊数据类型:GEO、Hyperloglog和Bitmap前言GEO 的数据结构总共有六个命令

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>
           

Redis(四)Redis的三种特殊数据类型:GEO、Hyperloglog和Bitmap前言GEO 的数据结构总共有六个命令

Bitmap

说明

Bitmap就是通过一个

bit

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

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

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

setbit [key] [offset] [value]

getbit [key]

bitcount [key]

举例 

Redis(四)Redis的三种特殊数据类型:GEO、Hyperloglog和Bitmap前言GEO 的数据结构总共有六个命令
😘如果对你有所帮助点个赞,给点小动力,谢谢啦~