Redis特殊数据类型Geospatial怎么使用

Redis特殊数据类型Geospatial地理空间

这是在redis 3.2版本推出的,推算地理位置的信息,两地之间的距离,周围方圆的人等等场景都可以用它实现。

一、geoadd

将指定的地理空间位置(纬度、经度、名称)添加到指定的key中。

这里可以借助网上的一些查询经纬度的工具来获取数据。

geoadd china:city 121.472644 31.231706 shanghai
geoadd china:city 120.619585 31.299379 suzhou
geoadd china:city 116.405285 39.904989 beijing
geoadd china:city 113.280637 23.125178 guangzhou 113.26197 23.10379 haizhuqu

Redis特殊数据类型Geospatial:让数据点位于地球表面上

往china:city这个key里,添加了5个地方的经纬度:上海、苏州、北京、广州、广州海珠区。

二、geopos

从key里返回所有给定位置元素的位置(经度和纬度)。

geopos china:city suzhou shanghai

返回位置的坐标。

三、geodist

返回两个给定位置之间的距离。

如果两个位置之间的其中一个不存在, 那么命令返回空值。

指定单位的参数 unit 必须是以下单位的其中一个:

  • m 表示单位为米(默认)。

  • km 表示单位为千米。

  • mi 表示单位为英里。

  • ft 表示单位为英尺。

geodist china:city suzhou shanghai km

四、georadius

以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。

georadius china:city 121.49295 31.22337 30 km

我以 上海黄浦区的坐标121.49295 31.22337为中心,寻找30km之内的城市。

再远点,100km之内,还可以找到suzhou,加上withdist显示出距离。

加上withcoord可以返回经纬度。

再加上count,只返回我指定的数量。

georadius china:city 121.49295 31.22337 100 km withdist withcoord count 1

五、georadiusbymember

这个命令和 georadius命令一样, 都可以找出位于指定范围内的元素。

但是这里不是指定中心点坐标,而是指定以哪个元素为中心点。

georadiusbymember china:city suzhou 100 km withdist

这里以元素suzhou为中心点,找周五100km内的其他元素。

六、geohash

一个或多个位置元素,用hash表示。

geohash china:city suzhou shanghai

返回11个字符的Geohash字符串,代表当前经纬度的字符串,就是换了个形式,将二维的经纬度转化成了一个一维的字符串。

如果上图结构里的2个字符串越接近,则2个位置距离也越近,这些了解即可。

geo的底层原理还是zset,我们可以使用zset命令操作geo,比如移除geo里的城市。

zrem china:city haizhuqu



Geospatial是一种Redis的特殊数据类型,它是一种独特的数据结构,用于存储地理空间数据。Geospatial列出了地球上的数据点的经度和纬度坐标,并提供了许多强大的命令来管理这些数据点。以下将详细介绍如何使用Redis的Geospatial数据类型。
1. 安装与配置
Redis Server版本应为3.2.0或以上,并且编译器需要支持GeoHash,默认情况下是启用的,可以打印出Redis CLI的信息以检查该设置是否已启用。如果未启用,请重新编译Redis Server。然后,可以使用以下命令启用此功能:
geoadd city 30.27 59.92 Moscow
其中“geoadd”是Redis Geospatial命令之一,“city”是键,而30.27和59.92是经度和纬度,这是该键的值之一。
2. 添加地理位置
使用“geoadd”命令添加一个新的地理位置:
geoadd city 77.68 12.19 Bangalore
可以添加多个地理位置:
geoadd city 77.68 12.19 Bangalore 77.21 28.67 Delhi 73.85 18.52 Hyderabad
可以使用以下命令查看任何键的所有数据:
geodist city Bangalore Delhi
命令将返回Bangalore和Delhi之间的距离。
3. 查询地理位置
指定地理位置关键字,然后查询出靠近该位置的其他位置:
georadius city 77.68 12.19 100 km WITHDIST WITHCOORD COUNT 10
指定地理位置关键字,距离和单位查询其他位置:
georadiusbymember city Bangalore 200 km
Redis的Geospatial数据类型可以存储大量的地理空间数据,可以轻松地查询和管理这些数据。对于许多需要地理空间数据存储或检索的应用程序,Redis的Geospatial数据类型都是最佳选择之一。