Redis应用实践——GeoHash
业界比较通用的距离排序算法,是GeoHash,Redis也使用了GeoHash算法。
可以用来实现附近的人,附近的单车,附近的司机等等功能。
实现原理
主要思路是将二维的坐标映射为一维的整数,比较基础容易理解的如二刀法。把正方形切一刀,然后再二分切一刀,再切 越来越小,然后每个切出来的正方形都用00,01,02这样的数字来表示,切的越多,数字越长,位置也更精确。
Geo算法会继续对这个整数做一次base32编码。在Redis中,将这个编码作为value放入zset中,score使用 经纬度编成的52位编码,可以用来排序距离。
基本用法
geoadd``geodist``getpos
gethash
georadiusbymember
获取一定距离范围内的元素georadius
提供坐标查询一定距离范围内的元素
注意事项
数据量很大之后,Geo的占用空间将会很大,如果单个key的数据过大,在迁移时会产生较大的性能影响。所以建议Geo使用单独的Redis实例部署。如果数据量更大,需要对Geo进行拆分,如按省市区来拆分。