Redis对Geo的支持

Redis利用GeoHash算法支持地理空间索引,将经纬度映射为52位整数存储在zset中。通过提供geo add、geopos、geodist、georadius等指令,实现地理位置的添加、查询、距离计算及范围搜索。GeoHash将二维坐标转为一维字符串,字符串长度与精度正相关,相似字符串表示位置接近。
摘要由CSDN通过智能技术生成

当需要在地图上计算 “附近的人” 的时候,业界通常使用 GeoHash 算法。

GeoHash 算法将二维的经纬度数据映射到一维的整数,这样地图上的点都将被映射到一条直线上,在地图上靠近的点映射到直线上的点之间的距离也会很接近,这样只需要在直线上获取附近的点就行了。

Redis 对 GeoHash 的支持

在 Redis 中,提供了 Geo 指令用以支持这种功能。

实际上,在 Redis 中,经纬度使用 52 位的整数进行编码,放进了 zset 里面,zset 的 value 是元素的 key,score 是 GeoHash 的 52 位整数值。zset 的 score 虽然是浮点数,但是对于 52 位的整数值,它可以无损存储。

在使用 Redis 进行 Geo 查询时,我们要时刻想到它的内部结构实际上只是一个 zset 。通过 zset 的 score 排序就可以得到坐标附近的其它元素 (实际情况要复杂一些,不过这样理解足够了),通过将 score 还原成坐标值就可以得到元素的原始坐标。

Geo 指令的基本使用

Redis 只提供了 6 个 Geo 指令。

  1. geo add key longitude latitude member [longitude latitude member …]

添加地理位置。

127.0.0.1:6379>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值