Redis中有三种非常实用的特殊数据类型,分别是Gaospatial地理位置、Hyperloglog基数统计、Bitmap位图场景,这三种特殊数据类型主要是对应了三种不同的使用场景。
1.Gaospatial地理位置:在高德,百度,腾讯等地图工具里,输入两个位置,就能得到两个位置之间的距离,这个操作,在Redis的Gaospatial地理位置中都可以实现。
首先是灰小猿大佬推荐的查询全国城市经纬度的网站。
查询全国城市经纬度的网站
地图中,如果我们想要查询一个位置,那么其实都是依据这个位置的坐标来实现的,查询之前,一定是需要先将这个坐标输入,Redis的Gaospatial中添加地理位置坐标的命令是GEOADD。
我们分别先查到武穴市和烟台市芝罘区的经纬度。
然后将经纬度存入key是china:city的索引中。输出之后:
127.0.0.1:6379> GEOADD china:city 115.55 29.84 wuxue
(integer) 1
127.0.0.1:6379> GEOADD china:city 121.40 37.54 yantaizf
(integer) 1
然后GEOPOS查询一个或多个地理位置坐标
127.0.0.1:6379> GEOPOS china:city wuxue
- “115.55999907255172729”“29.84999926510690784”
127.0.0.1:6379> GEOPOS china:city yantaizf“121.40999907255172729”“37.54999926510690784”
GEODIST查询两地之间的距离
GEORADIUS以坐标为中心来范围搜索地理位置
查询深圳市福田区(114.05571,22.52245)半径1000km之内的城市
127.0.0.1:6379> GEORADIUS china:city 114.05 22.52 1000 km“shenzhen”“guangzhou”
GEORADIUSBYMEMBER以位置为中心来范围搜索地理位置,可以用于输入一个确定的地理位置进行范围搜索。
如我们查询以太原为中心,800km以内的城市。
127.0.0.1:6379> GEORADIUSBYMEMBER china:city taiyuan 800 km“zhengzhou”“taiyuan”“beijing”
基数计算(cardinality counting)指的是统计一批数据中的抛去重复元素后数据的个数
引用灰小猿大佬举的一个例子:
比如我们现在定义两个数字集合h1和h2
h1={1,3,5,7,9,7}
h2={3,4,6,8,9,5}
那么h1中抛去重复后得到的数据集合是{1,3,5,7,9},所以h1的基数就是5,h2中跑去重复的元素后得到的集合是{3,4,6,8,9,5},所以h2是的基数就是6
这种可以用于计算有多少人访问了网站,比如一个人来访问一次,就用一个数进行记录,这样就能比较准确的得知访问的人数。
以下进行操作:
PFADD创建一组数据
PFCOUNT统计数据集的基数数量,mynum1”中的七个元素都不重复,那么基数是7。查询“mynum3”,“mynum3”中的n重复,那么基数是4
PFMERGE合并数据集,将“mynum1”和“mynum2”合并并集为“mynum4”,再求“mynum4”的基数,得到13,是因为其中的f和g重复。
Redis中的Bitmap位图是通过操作二进制位来实现的,在其中存储的数据要么是0,要么是1。
位图使用场景:统计用户活跃度,如果在线则为1,不在线为0,打卡,打卡成功为1,打卡不成功为0。
以下进行操作:
SETBIT在Redis中给一个Bitmap输入数据
如我们输入某个员工一周的打卡记录,数据集的索引是“mybit1”,注意数据集的下标是从0开始的。
BITCOUNT统计“1”的个数。
学习了Redis中的三种特殊数据类型:Gaospatial地理位置、Hyperloglog基数统计、Bitmap位图场景。



