概述
geospatial 地理位置 :
朋友定位,附近的人,打车距离计算?
redis 的 Geo在版本3.2就推出来了,这个功能可以推算出地理位置的信息,两地之间的距离。他总共只要6个命令。
规则 : 两级无法直接添加,我们一般会下载城市数据,使用程序一次性导入。有效经纬度从-180到180度,有效纬度从-85.05112878 到 85.05112878度。
参数 : GEOADD key 值(经纬度、经度、名称)
127.0.0.1:6379> GEOADD china:city 116.40 39.9 beijin #添加一个城市的经纬度
(integer) 1#同时添加两个城市的经纬度
127.0.0.1:6379> GEOADD china:city 106.50 29.53 choqin 114.05 22.52
(integer) 2
127.0.0.1:6379>
GEOPOS : 获得当前定位,当前定位一定是一个坐标值。
127.0.0.1:6379> GEOPOS china:city choqin #获取指定城市的经纬度
1) 1) "106.49999767541885376"
2) "29.52999957900659211"
127.0.0.1:6379>
GEODIST: 根据两个城市计算距离
单位 : m表示米 km表示千米 mi表示英里 ft表示英寸
127.0.0.1:6379> GEODIST china:city choqin shengzheng km #计算两个城市的距离,千米
"1084.4275"
127.0.0.1:6379>
GEORADIUS : 给定一个经纬度中心,找出经纬度中心以外距离的城市(以自己的位置找出其他位置)。前提是我们需要将城市经纬度录入。
#以100,30这个定位为中心,寻找方圆1000kn内的城市
27.0.0.1:6379> GEORADIUS china:city 110 30 1000 km
1) "choqin"
2) "shengzheng"#显示到中间距离位置
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km withdist
1) 1) "choqin"
2) "341.9374"
2) 1) "shengzheng"
2) "924.6408"#显示他人所有的定位信息
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km withcoord
1) 1) "choqin"
2) 1) "106.49999767541885376"
2) "29.52999957900659211"
2) 1) "shengzheng"
2) 1) "114.04999762773513794"
2) "22.5200000879503861"#显示他人的定位信息 1条
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km withcoord count 1
1) 1) "choqin"
2) 1) "106.49999767541885376"
2) "29.52999957900659211"#显示他人的定位信息 2条
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km withcoord count 2
1) 1) "choqin"
2) 1) "106.49999767541885376"
2) "29.52999957900659211"
2) 1) "shengzheng"
2) 1) "114.04999762773513794"
2) "22.5200000879503861"
127.0.0.1:6379>
GEORADIUSBYMEMBER: 找出指定位置周围的其他元素
#找出重庆2000千米的其他城市
127.0.0.1:6379> GEORADIUSBYMEMBER china:city choqin 2000 km
1) "choqin"
2) "shengzheng"
3) "beijin"
127.0.0.1:6379>
GEORADIUSBYMEMBER: 返回一个元素或多个元素的Geohash表示
将二维的经纬度转换为一维的字符串,如果两个字符串越近那么则距离越近!
127.0.0.1:6379> GEOHASH china:city choqin #返回一个城市的hash
1) "wm5xzrybty0"
127.0.0.1:6379> GEOHASH china:city choqin shengzheng #返回多个城市的hash
1) "wm5xzrybty0"
2) "ws10578st80"
127.0.0.1:6379>
GEO: 底层的实现原理其实就是Zset 我们可以使用Zset命令来操作GEO
127.0.0.1:6379> ZRANGE china:city 0 -1 #查询地图中全部元素
1) "choqin"
2) "shengzheng"
3) "beijin"
127.0.0.1:6379> zrem china:city shengzheng #根据元素名移除指定元素
(integer) 0
127.0.0.1:6379> zrem china:city choqin #查询指定元素是否存在
(integer) 1
127.0.0.1:6379>
Hyperloglog :
什么是基数?基数就是不重复的元素,当我们统计一个网站的访问量时会出现重复访问的情况,重复访问是不计入统计的,这样的话我们就可以使用Hyperloglog,传统统计这样的元素时可能一般会使用set集合,因为set是无序的,但是随着数据量的变大就会比较麻烦,因为我们只需要统计一个访问数字而已。Hyperloglog的优点是占用的空间非常小,缺点是会有0.81%的错误率的,但是这个错误率在统计页面访问数据时是可以忽略不计的(如果允许容错就可以使用我们的Hyperloglog,效率高速度快,如果不允许容错可以考虑其他方式)。
127.0.0.1:6379> PFADD mykey a b c f r g f 1 2 #存入一组数据
(integer) 1
127.0.0.1:6379> PFCOUNT mykey #存入数据的个数
(integer) 8
127.0.0.1:6379> PFADD mykey1 j K R 2 1 #存入另一组数据
(integer) 1
127.0.0.1:6379> PFCOUNT mykey1
(integer) 5#将两组数据合并 PFMERGE 合并的别名 合并的数据1 合并的数据二
#合并的别名可以和合并数据名相同,他会进行覆盖
127.0.0.1:6379> PFMERGE mykey3 mykey mykey1
OK
127.0.0.1:6379> PFCOUNT mykey3
Bitmaps :他是一个位存储
他一般可以用来统计用户信息,是否登陆,性别,考勤等等,只要是两个状态的都可以使用Bitmaps。他只有两个状态 0和1
示例 :存入考勤打开信息 0:未打卡 1:已打卡
127.0.0.1:6379> SETBIT sign 0 1 星期日 打卡
(integer) 0
127.0.0.1:6379> SETBIT sign 1 1 星期1 打卡
(integer) 0
127.0.0.1:6379> SETBIT sign 2 0 星期2 未打卡
(integer) 0
127.0.0.1:6379> getbit sign 2 查询星期二是否打卡
(integer) 0
127.0.0.1:6379> getbit sign 1
(integer) 1
127.0.0.1:6379> getbit sign 8 如果没有记录存入查询出来永远是0
(integer) 0
127.0.0.1:6379> bitcount sign 统计已打卡天数
(integer) 2
127.0.0.1:6379> bitcount sign 1 2 根据范围统计
最后
以上就是清脆海燕为你收集整理的Redis 三种特殊数据类型geospatial 地理位置 :Hyperloglog :Bitmaps :他是一个位存储的全部内容,希望文章能够帮你解决Redis 三种特殊数据类型geospatial 地理位置 :Hyperloglog :Bitmaps :他是一个位存储所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复