Redis GEO类型应用场景

GEO 主要用于存储地理位置信息,并对其进行一系列的操作,非常适合用于 位置信息服务(Location-Based Service,LBS)的应用场景。

GEO类型的常用操作

GEOADD 新增某个位置信息
127.0.0.1:6379> GEOADD loc 13.23 12.33 A # 在key为loc的地理位置信息上 新增A 坐标为13.23 12.33
(integer) 1
127.0.0.1:6379> GEOADD loc 14.23 13.33 B
(integer) 1
127.0.0.1:6379> GEOADD loc 10.23 12.43 C
(integer) 1

GEOPOS 获取某个位置的坐标信息
127.0.0.1:6379> GEOPOS loc A # 会返回2个值, 并且可以看出最终存储在的数据与写入的数据不是完全相等的 这也是浮点数通常无法精确存储的问题
1) 1) "13.22999864816665649"
   2) "12.33000026369534652"
127.0.0.1:6379> GEOPOS loc B
1) 1) "14.23000127077102661"
   2) "13.33000099019890428"

GEODIST 计算两个点之间的距离

默认单位是米(m), 可以选择 千米(km) 英里(mi) 英尺(ft)

127.0.0.1:6379>  GEODIST loc A B
"155345.6418"
127.0.0.1:6379> GEODIST loc A B km # 指定单位km
"155.3456"

GEODIST 计算两个点之间的距离

默认单位是米(m), 可以选择 千米(km) 英里(mi) 英尺(ft)

127.0.0.1:6379>  GEODIST loc A B
"155345.6418"
127.0.0.1:6379> GEODIST loc A B km # 指定单位km
"155.3456"

GEODIST 计算两个点之间的距离

默认单位是米(m), 可以选择 千米(km) 英里(mi) 英尺(ft)

127.0.0.1:6379>  GEODIST loc A B
"155345.6418"
127.0.0.1:6379> GEODIST loc A B km # 指定单位km
"155.3456"

GEORADIUS 指定一个坐标为圆心,查询指定范围内的其他元素列表

默认范围单位是米(m), 可以选择 千米(km) 英里(mi) 英尺(ft)

127.0.0.1:6379> GEORADIUS loc 10 10 200 km # 表示在key为loc的坐标系中,10 10坐标 200km范围内没有其他元素
(empty list or set)
127.0.0.1:6379> GEORADIUS loc 10 10 300 km # 表示在key为loc的坐标系中,10 10坐标 300km范围内有C
1) "C"
127.0.0.1:6379> GEORADIUS loc 10 10 300 km WITHCOORD # 结果带上元素的坐标
1) 1) "C"
   2) 1) "10.23000150918960571"
      2) "12.43000008287358327"
127.0.0.1:6379> GEORADIUS loc 10 10 300 km WITHCOORD WITHDIST# 结果带上元素的坐标和与 指定圆心坐标的距离(km)
1) 1) "C"
   2) "271.4421"
   3) 1) "10.23000150918960571"
      2) "12.43000008287358327"

GEORADIUSBYMEMBER 指定一个元素的坐标为为圆心,查询指定范围内的其他元素列表

默认范围单位是米(m), 可以选择 千米(km) 英里(mi) 英尺(ft)

127.0.0.1:6379> GEORADIUSBYMEMBER loc A 100 km  # A 坐标周围100km返回内的元素列表(包含A自己)
1) "A"
127.0.0.1:6379> GEORADIUSBYMEMBER loc A 180 km 
1) "A"
2) "B"
127.0.0.1:6379> GEORADIUSBYMEMBER loc A 180 km WITHCOORD WITHDIST  # A 坐标周围180km返回内的元素列表(包含A自己) 带上距离和坐标
1) 1) "A"
   2) "0.0000"
   3) 1) "13.22999864816665649"
      2) "12.33000026369534652"
2) 1) "B"
   2) "155.3456"
   3) 1) "14.23000127077102661"
      2) "13.33000099019890428"

实际应用场景

1.查看周边相关设施列表

这是一种很常见于LBS类型服务的功能,用户当前位置周边的相关设置查询

设施的位置一般都是固定的,可以在登记的时候提前录入

127.0.0.1:6379> GEOADD map 10.23233 13.23442 A
(integer) 1
127.0.0.1:6379> GEOADD map 10.23433 13.23142 B
(integer) 1
127.0.0.1:6379> GEOADD map 10.23133 13.22942 C
(integer) 1

然后用户根据自身当前上报的位置 去查询周围存在哪些设施

127.0.0.1:6379> GEORADIUS map 10.22423 13.23232 2 km WITHDIST ASC # 当前位置2km范围内的设施 由近到远排序
1) 1) "C"
   2) "0.8338"
2) 1) "A"
   2) "0.9075"
3) 1) "B"
   2) "1.0982"

如果设施特别集中 也可以限制返回的数量

127.0.0.1:6379> GEORADIUS map 10.22423 13.23232 2 km WITHDIST ASC COUNT 2
1) 1) "C"
   2) "0.8338"
2) 1) "A"
   2) "0.9075"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值