Redis高级特性之geo

一、场景

微信附近的人、外卖app商家距离多少米、你与她是否同城,等等。这都咋实现的?很简单,就是拿着经纬度去计算。客户端获取经纬度给服务端,服务端进行计算。

二、geo

1、版本

3.2添加的新特性

2、实操

2.0、api

在这里插入图片描述

2.1、数据准备

从网上搜集几个城市的经纬度来做测试。

城市 经度 纬度 英文
北京 116.28 39.55 beijing
天津 117.12 39.08 tianjin
石家庄 114.29 38.02 shijiazhuang
唐山 118.01 39.38 tangshan
保定 115.29 38.51 baoding

2.2、录入数据

127.0.0.1:6379> GEOADD cities:locations 116.28 39.55 beijing 117.12 39.08 tianjin 114.29 38.02 shijiazhuang 118.01 39.38 tangshan 115.29 38.51 baoding
(integer) 5

2.3、获取某个地区经纬度

127.0.0.1:6379> GEOPOS cities:locations tianjin
1) 1) "117.12000042200088501"
   2) "39.0800000535766543"

2.4、获取两个地址位置的距离

# 获取间隔多少千米
127.0.0.1:6379> GEODIST cities:locations tianjin beijing km
"89.2061"
# 获取间隔多少米
127.0.0.1:6379> GEODIST cities:locations tianjin beijing m
"89206.0576"

2.5、高级api之georadius

在这里插入图片描述
比如利用georadiusbymember完成北京附近100km内的所有城市。

127.0.0.1:6379> GEORADIUSBYMEMBER cities:locations beijing 100 km
1) "beijing"
2) "tianjin"

2.6、底层存储

# 可以发现是用zset存储的,所以要移除某个元素的话可以直接使用zrem key member
127.0.0.1:6379> type cities:locations
zset

三、个人公众号

微信公众号【Java码农社区】
在这里插入图片描述

发布了47 篇原创文章 · 获赞 41 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ctwctw/article/details/105264466