您现在的位置是:首页 > 编程 > 

【Redis】005

2025-07-28 15:41:37
【Redis】005 一、geospatial地理位置1、概述将指定的地理空间位置(纬度、经度、名称)添加到指定的key中。这些数据将会存储到sorted set这样的目的是为了方便使用GEORADIUS或者GEORADIUSBYMEMBER命令对数据进行半径查询等操作;场景:朋友的定位、附近的人、打车距离计算;Redis的Geo在Redis.2版本就推出了;有效的经度从-180度到180度;有

【Redis】005

一、geospatial地理位置

1、概述

将指定的地理空间位置(纬度、经度、名称)添加到指定的key中。这些数据将会存储到sorted set这样的目的是为了方便使用GEORADIUS或者GEORADIUSBYMEMBER命令对数据进行半径查询等操作;

场景:朋友的定位、附近的人、打车距离计算;

Redis的Geo在Redis.2版本就推出了;

有效的经度从-180度到180度;

有效的纬度从-85.05112878度到85.05112878度;

当坐标位置超出上述指定范围时,该命令将会返回一个错误;

2、添加地理位置信息

我们一般会下载城市数据,用Java程序一次性导入;

格式:
代码语言:javascript代码运行次数:0运行复制
geoadd key 经度 纬度 名称 # 添加一个
代码:
代码语言:javascript代码运行次数:0运行复制
127.0.0.1:679> geoadd china:city 116.40 9.90 beijing # 添加一个
(integer) 1
127.0.0.1:679> geoadd china:city 121.47 1.2 shanghai 106.50 29.5 chongqing # 添加多个
(integer) 2
图解:

、通过key和城市名获取一个城市的经度和纬度

格式:
代码语言:javascript代码运行次数:0运行复制
geopos key 名字
代码:
代码语言:javascript代码运行次数:0运行复制
127.0.0.1:679> geopos china:city beijing
1) 1) "116.9999896287918"
   2) "9.900000091670925"
图解:

4、返回两个给定位置的距离

单位:
  • m 表示单位为米;
  • km 表示单位为千米;
  • mi 表示单位为英里;
  • ft 表示单位为英尺;
格式:
代码语言:javascript代码运行次数:0运行复制
geodist key 名字1 名字2 单位(默认是米)
代码:
代码语言:javascript代码运行次数:0运行复制
127.0.0.1:679> geodist china:city beijing chongqing
"1464070.8051"
图解:

5、以给定的经度纬度为中心出某一半径内的元素

格式:
代码语言:javascript代码运行次数:0运行复制
georadius key 给定的经度 给定的纬度 距离 单位

# 获取给定位置和半径内的位置信息

georadius key 给定的经度 给定的纬度 距离 单位 withcood

# 获取给定位置和半径内的位置信息,并显示他人的定位信息

georadius key 给定的经度 给定的纬度 距离 单位 withdist withcood count num

# 可使用withdist withcood count num 设置限制数量
代码:
代码语言:javascript代码运行次数:0运行复制
127.0.0.1:679> georadius china:city 110 0 1000 km
1) "chongqing"
图解:

6、以给定的位置元素为中心出某一半径内的元素

格式:
代码语言:javascript代码运行次数:0运行复制
georadiusbymember key 名字 距离 单位

# 其他可参考——5、以给定的经度纬度为中心出某一半径内的元素
代码:
代码语言:javascript代码运行次数:0运行复制
127.0.0.1:679> georadiusbymember china:city shanghai 1500 km
1) "chongqing"
2) "shanghai"
) "beijing"
图解:

7、获取一个或多个位置元素的Geohash

概述:

返回11个字符的Geohash字符串;

字符串越像,距离越近;

格式:
代码语言:javascript代码运行次数:0运行复制
geohash key 名字1 名字2 。。。 以此类推即可
代码:
代码语言:javascript代码运行次数:0运行复制
127.0.0.1:679> geohash china:city beijing shanghai
1) "wx4fbxxfke0"
2) "wtwsj5zbj0"
图解:

8、补充

geo的底层实现原理是Zset,我们可以使用Zset命令来操作geo;

代码:
代码语言:javascript代码运行次数:0运行复制
127.0.0.1:679> zrange china:city 0 -1
1) "chongqing"
2) "shanghai"
) "beijing"
127.0.0.1:679> zrem china:city beijing
(integer) 1
127.0.0.1:679> zrange china:city 0 -1
1) "chongqing"
2) "shanghai"
二、HyperLogLog基数统计

1、概述

什么是基数:

集合A={1,2,,4,5,}的基数(一个集合中不重复的元素个数)为5;

简介:

Redis2.8.9版本更新出来了HyperLogLog数据结构;

Redis HyperLogLog基数统计算法;

举例:网站的UV(访问人数);

HyperLogLog基数统计算法优点:占用的内存是固定的2^64不同的元素,只需要消耗12k的内存;

存在0.81%的错误率(是可接受的,如果不容错误,则可以使用set或者其他);

传统的方式:使用set集合(不允许重复)保存用户的id,这种方式如果保存大量的用户id就会很麻烦;

我们的目的是计数,而不是保存用户id;

2、添加元素并计算数量

代码:
代码语言:javascript代码运行次数:0运行复制
127.0.0.1:679> pfadd key1 1 2  4 5 6 7 8 9
(integer) 1
127.0.0.1:679> pfcount key1
(integer) 9
图解:
、合并两个
格式:
代码语言:javascript代码运行次数:0运行复制
pfmerge 合并到的key 被合并的key1 被合并的key2
代码:
代码语言:javascript代码运行次数:0运行复制
127.0.0.1:679> pfadd key1 1 2  4 5 6 7 8 9
(integer) 1
127.0.0.1:679> pfcount key1
(integer) 9
127.0.0.1:679> pfadd key2 a b c d e f g
(integer) 1
127.0.0.1:679> pfcount key2
(integer) 7
127.0.0.1:679> pfmerge key1 key2
OK
127.0.0.1:679> pfcount key1
(integer) 16
127.0.0.1:679> pfcount key2
(integer) 7
127.0.0.1:679> pfmerge key key1 key2
OK
127.0.0.1:679> pfcount key
(integer) 16
图解:
三、Bitmaps

1、概述

场景:统计用户信息:活跃、不活跃;登录、未登录;打卡、未打卡;两个状态的都可以使用Bitmaps;

Bitmaps位图,数据结构,都是操作二进制位来进行记录,就只有0和1两种状态;

2、添加

格式:
代码语言:javascript代码运行次数:0运行复制
setbit key index boolen(0或者1)
图解:

、获取

格式:
代码语言:javascript代码运行次数:0运行复制
getbit key index
图解:

4、统计

格式:
代码语言:javascript代码运行次数:0运行复制
bitcount key [start stop]

# 不带[start stop]默认查询全部,带了反而我还没搞明白怎么回事,没懂啥意思
代码:
代码语言:javascript代码运行次数:0运行复制
127.0.0.1:679> bitcount sign
(integer) 4
图解:
问题:

[start stop]不知道怎么用;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-01-06,如有侵权请联系 cloudcommunity@tencent 删除统计geospatialredis集合数据类型

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1198254.html

相关标签:无
上传时间: 2025-07-23 11:08:52
留言与评论(共有 18 条评论)
本站网友 孕妇饮食大全
21分钟前 发表
679> bitcount sign (integer) 4图解:问题:[start stop]不知道怎么用;本文参与 腾讯云自媒体同步曝光计划
本站网友 艺人经纪
2分钟前 发表
统计格式:代码语言:javascript代码运行次数:0运行复制bitcount key [start stop] # 不带[start stop]默认查询全部
本站网友 华富
16分钟前 发表
以给定的经度纬度为中心出某一半径内的元素格式:代码语言:javascript代码运行次数:0运行复制georadius key 给定的经度 给定的纬度 距离 单位 # 获取给定位置和半径内的位置信息 georadius key 给定的经度 给定的纬度 距离 单位 withcood # 获取给定位置和半径内的位置信息
本站网友 好想日b
28分钟前 发表
679> pfadd key1 1 2 4 5 6 7 8 9 (integer) 1 127.0.0.1
本站网友 卓越维港
15分钟前 发表
分享自作者个人站点/博客
本站网友 fullscreen
2分钟前 发表
以给定的经度纬度为中心出某一半径内的元素代码:代码语言:javascript代码运行次数:0运行复制127.0.0.1
本站网友 蓝印户口是什么意思
21分钟前 发表
本站网友 云开日出
6分钟前 发表
679> geohash china
本站网友 758事件
25分钟前 发表
679> pfcount key2 (integer) 7 127.0.0.1
本站网友 今日黄金价格周大福
29分钟前 发表
679> geohash china
本站网友 如何减掉腹部赘肉
26分钟前 发表
以给定的经度纬度为中心出某一半径内的元素格式:代码语言:javascript代码运行次数:0运行复制georadius key 给定的经度 给定的纬度 距离 单位 # 获取给定位置和半径内的位置信息 georadius key 给定的经度 给定的纬度 距离 单位 withcood # 获取给定位置和半径内的位置信息
本站网友 家用网络摄像机
20分钟前 发表
679> pfcount key1 (integer) 9 127.0.0.1
本站网友 假奶粉
6分钟前 发表
679> bitcount sign (integer) 4图解:问题:[start stop]不知道怎么用;本文参与 腾讯云自媒体同步曝光计划
本站网友 博彩评级网
12分钟前 发表
添加格式:代码语言:javascript代码运行次数:0运行复制setbit key index boolen(0或者1)图解:
本站网友 微博关闭评论
18分钟前 发表
未登录;打卡
本站网友 雨恋
30分钟前 发表
679> zrange china
本站网友 车城名仕花园三期
4分钟前 发表
HyperLogLog基数统计1