redis高级:GEO地理位置信息、乐观锁悲观锁及python中实现
一、GEO地理位置信息
介绍
GEO(地理信息定位):存储经纬度,计算两地距离,范围等
他的本质是一个有序集合。
我们可以根据经纬度,确定具体地址的。比如使用高德开放api返回具体地址(但是可能有些时候不准确,需要人工去处理这些问题)
应用举例:
北京:116.28,39.55
天津:117.12,39.08
可以计算天津到北京的距离,天津周围50km的城市,外卖
可以统计某个经纬度范围内有哪些好友,餐馆等
项目中如何获取经纬度:
1、这跟后端没关系:后端只需要存
2、app,有定位功能
3、网页,集成了高德地图,定位功能
5个城市纬度
城市 | 经度 | 纬度 | 简称 |
---|---|---|---|
北京 | 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 |
redis中的相关命令
redis存储地理位置信息
geoadd key longitude latitude member
geoadd key 经度 纬度 名字
例:把北京地理信息天津到cities:locations中
geoadd cities:locations 116.28 39.55 beijing
geoadd cities:locations 117.12 39.08 tianjin
geoadd cities:locations 114.29 38.02 shijiazhuang
geoadd cities:locations 118.01 39.38 tangshan
geoadd cities:locations 115.29 38.51 baoding
获取地理位置信息
geopos key member
geopos cities:locations beijing #获取北京地理信息
geodist key member1 member2 [unit]#获取两个地理位置的距离 unit:m(米) km(千米) mi(英里) ft(尺)
geodist cities:locations beijing tianjin km #北京到天津的距离,89公里
获取指定位置范围内的地理位置信息集合
georadius key logitude latitude radiusm|km|ft|mi [withcoord] [withdist] [withhash] [COUNT count] [asc|desc] [store key][storedist key]
georadiusbymember key member radiusm|km|ft|mi [withcoord] [withdist] [withhash] [COUNT count] [asc|desc] [store key][storedist key]
#获取指定位置范围内的地理位置信息集合
'''
withcoord:返回结果中包含经纬度
withdist:返回结果中包含距离中心节点位置
withhash:返回解雇中包含geohash
COUNT count:指定返回结果的数量
asc|desc:返回结果按照距离中心店的距离做升序/降序排列
store key:将返回结果的地理位置信息保存到指定键
storedist key:将返回结果距离中心点的距离保存到指定键
'''
georadiusbymember cities:locations beijing 150 km
'''
1) "beijing"
2) "tianjin"
3) "tangshan"
4) "baoding"
'''