我是靠谱客的博主 清脆海燕,最近开发中收集的这篇文章主要介绍Redis 三种特殊数据类型geospatial 地理位置 :Hyperloglog :Bitmaps :他是一个位存储,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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 :他是一个位存储所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(73)

评论列表共有 0 条评论

立即
投稿
返回
顶部