暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

学习之路:redis实现摇一摇和附近的人思路原理

刘狗是狗 2020-02-16
445

当redis 逐渐因为自己是内存数据库,速度快,支持了多种类型,支持了持久化,原子性等一系列优点而广泛被互联网使用之后。


redis也开始了丰富的其他功能。在redis3.0之后开始支持集群模式。在3.2的版本中增加了最大的功能就是支持GEO类型的数据。

这也就是redis为什么可以实现摇一摇和附近的人的原因。


首先大概了解下GEO类型的基本功能。


其实在redis底层中GEO类型存储依靠的还是zset(有序集合),和 set(集合)。


首先让我们了解下geo的命令:


1.

添加地理位置命令  geoadd:

geoadd 可以添加多个地理位置:

geoadd key longitude latitude member [longitude latitude member ...]

例:

geoadd city 120.20000 30.26667 hangzhou 116.41667 39.91667 beijing 121.47 31.23 shanghai

2.

获取地理位置  geopos:

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

例:

geopos city hangzhou beijing shanghai

3.

计算位置  geodist:

距离单位可以是 m、km、ml、ft,分别代表米、千米、英里和尺。

例:

geodist city shanghai hangzhou km

geodist city beijing hangzhou m

4.

查询附近位置命令 georadiusbymember :

使用GEORADIUSBYMEMBER命令即可查询附近的位置

例:

例如查找距离杭州300km以内的城市的10个城市按距离排序

georadiusbymember city hangzhou 300 km withcoord withdist withhash asc count 10

        说明:

  • withdist :  在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。距离的单位和用户

    •              给定的范围单位保持一致。

  • withcoord将位置元素的经度和维度也一并返回。

  • withhash:   以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。

  • asc:            根据中心的位置, 按照从近到远的方式返回位置元素。DESC :根据中心的位置照

      •     从远到近的方式返回位置元素。

5.

获取元素的 hash 值 geohash:

例:          

  geohash city hangzhou

6.

通过底层结构获取经纬度 zset: 

        例:

        zrange city 0 -1

        zrange city 0 -1 withscores


文章转载自刘狗是狗,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论