添加地理位置到Redis
本篇文章就来扯一下犊子。。。不,来扯一下基于Redis Geo地理空间的实现。
言归正传,Redis Geo是怎么实现地理空间存储的?记得毛爷爷说过:实践是检验真理的唯一标准。
作为程序员没有点敲代码的能力怎么能行?
虽说在座的各位都是面向Ctrl+c,Ctrl+v编程,先使用一条简单的命令来引出今天的话题吧!
以上命令是在Redis命令行模式下执行,加入北上广深的经纬度以供我们后续的测试。那么在redis内部存储的类型是什么呢?为什么Geo相关命令没有删除元素的命令呢?
下图展示了在Redis中存储的数据和类型。
竟然是有序集合Zset,那么需要删除某个元素只需要调用Zset相关的命令即可。
以上说了一个最基本的命令,就是在有序集合中添加了北上广深的地理位置信息,这是什么原理?不要问我,反正我也不知道。
计算两点间的距离
以下命令分别计算广州-上海、深圳-广州,深圳-北京的距离以km为单位。
场景:某陌,你与陌生小姐姐的距离。实际情况可能会复杂点。
计算指定地位位置、指定范围内的集合
以下命令返回经度113度,纬度23度范围200km内的集合。WITHCOORD-指定该参数将返回与中心的距离,如广州到中心点的距离为30.6255km。WITHDIST-指定该参数将返回地址位置坐标,可以使用ASC或者DESC返回距离中心的距离排序。
场景:点外卖,你附近有多少商家等着你。咦,不是某陌吗?
获取地理位置信息
好理解,把Zset中的数字还原为经纬度,方便在地图中展示。如获取深圳、广州的经纬度,可获取单个点和多个点。场景:某陌,小姐姐在地图上的哪个点。
获取一个或多个位置元素的标准GeoHash
这也验证了开篇说的,共享前缀越长距离越近的说法,以上时深圳-北京,深圳-广州的结果。这个用处好像没那么大,可以供持久化到数据库等。
获取指定成员、指定范围内的集合
和georadius命令类似,这个命令的中心点是元素成员为中心的,以上命令展示了以深圳和北京为中心距离200km内的城市。场景:某陌,我附近的小姐姐有多少个。
后话
当然,使用Redis来作为业务解决方案或许还要根据实际需求来,这里只是一个引子,还是可以满足一些小项目的。
下期讲下基于Mysql的解决方案。有帮助,记得点赞!!点关注,不迷路!!!