Redis7系列:Redis GEO解锁百万级地理位置数据的超能力
想用代码丈量地球?Redis GEO数据类型让你用一行命令就能构建滴滴打车般的实时定位系统!这个藏在Redis中的空间魔法,自3.2版本起就为开发者打开了新世界的大门。
01 空间魔法的核心咒语
Redis GEO本质上是基于Sorted Set的魔法变形,它将经纬度编码为52位Geohash字符串,化身ZSET的score值。
GEO 数据类型是从Redis3.2.0开始有的。
1.1 咒语:GEOADD
# 增加经维度信息
GEOADD key [NX | XX] [CH] longitude latitude member [longitude latitude member ...]
- key: Redis的Key,管理经纬度的标识
- NX:不存时写入
- XX:存在时写入
- CH:改变计数器的开关,全称changed
- longitude:经度
- latitude:维度
- member:可以理解为这组经纬度(成员)的一个名称
可以一次性增加多个经纬度。
数据准备:
上海市:121.480248,31.236276
苏州市:120.591682,31.305976
杭州市:120.216329,30.252589
> geoadd cities 121.480248 31.236276 shanghai 120.591682 31.305976 suzhou 120.216329 30.252589 hangzhou
(integer) 3
CH
的使用:坐标变化检测的计数器
我们修改上海的坐标:121.49 31.24 shanghai
> geoadd cities 121.49 31.24 shanghai
(integer) 0
> geopos cities shanghai
1) 1) "121.49000018835067749"
2) "31.24000104945258727"
我们看到shanghai的坐标已经改变,但是返回值是0。我们再改回去,加上CH
> geoadd cities CH 121.480248 31.236276 shanghai
(integer) 1
> geopos cities shanghai
1) 1) "121.48024767637252808"