Redis-查询附近人

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zanpengfei/article/details/83512954

一、查询附近人:Geo指令,底层是普通的zst结构,提供7个命令

1)添加指令:geoadd 指令携带集合名称以及多个经纬度名称三元组,注意这里可以加入多个三元组

geoadd company 116.48105 39.996794 juejin

  • 2)计算距离:geodist 指令可以用来计算两个元素之间的距离,携带集合名称、2 个名称和距离单位

geodist company juejin ireader km

3)获取元素位置:geopos 指令可以获取集合中任意元素的经纬度坐标,可以一次获取多个

geopos company juejin

5)获取元素的 hash 值:geohash 可以获取元素的经纬度编码字符串,上面已经提到,它是 base32 编码。 你可以使用这个编码值去 geohash.org/${hash}中进行直… geohash 的标准编码值  geohash company ireader

计算编码值网址:http://geohash.org/

6)查询附近的公司:georadiusbymember 指令是最为关键的指令,它可以用来查询指定元素附近的其它元素,它的参数非常复杂

georadiusbymember company ireader 20 km count 3 asc

7)根据坐标查询附近的元素:它可以根据用户的定位来计算「附近的车」,「附近的餐馆」等。它的参数和 georadiusbymember 基本一致,除了将目标元素改成经纬度坐标值  georadius company 116.514202 39.905409 20 km withdist count 3 asc

注意事项:

在一个地图应用中,车的数据、餐馆的数据、人的数据可能会有百万千万条,如果使用 Redis 的 Geo 数据结构,它们将全部放在一个 zset 集合中。在 Redis 的集群环境中,集合可能会从一个节点迁移到另一个节点,如果单个 key 的数据过大,会对集群的迁移工作造成较大的影响,在集群环境中单个 key 对应的数据量不宜超过 1M,否则会导致集群迁移出现卡顿现象,影响线上服务的正常运行。 所以,这里建议 Geo 的数据使用单独的 Redis 实例部署,不使用集群环境。 如果数据量过亿甚至更大,就需要对 Geo 数据进行拆分,按国家拆分、按省拆分,按市拆分,在人口特大城市甚至可以按区拆分。这样就可以显著降低单个 zset 集合的大小。

猜你喜欢

转载自blog.csdn.net/zanpengfei/article/details/83512954