Redis高级特性之geo

1、场景

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

2、geo

一、版本

3.2添加的新特性redis

二、实操

2.0、api

在这里插入图片描述

2.一、数据准备

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

城市 经度 纬度 英文
北京 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.二、录入数据

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.三、获取某个地区经纬度

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

2.四、获取两个地址位置的距离

# 获取间隔多少公里
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.五、高级api之georadius

在这里插入图片描述
好比利用georadiusbymember完成北京附近100km内的全部城市。api

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

2.六、底层存储

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

3、我的公众号

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