前面我们已经把五大数据类型讲完了,今天我开始讲redis特殊数据类型Geospatial,地理位置的存储,这个是数据类型可以实现朋友定位,两个地方之间的距离,搜索附近的人等。具体操作就是将指定的地理空间位置(纬度、经度、名称)添加到指定的key中,这些数据将会存储到sorted set然后使用GEORADIUS或者GEORADIUSBYMEMBER命令对数据进行半径查询计算出范围内的元素和元素之间的距离。
Geospatial数据类型只有六个命令
添加元素
Geoadd [key] [经度] [纬度] [元素]
操作这个命令之前我们需要去网上查找一些城市的经纬度坐标,因为经度和纬度是有范围限制的,如果随便添加有可能会报错,官网显示说明
· 有效的经度从-180度到180度。
· 有效的纬度从-85.05112878度到85.05112878度
所以添加的值不能超过这个范围,网上找了北京、上海、广州、深圳、杭州、南京的经纬度进行添加数据。
这里我们只是测试当然是手动添加,实际中我们可以是程序进行批量添加城市位置信息。
取值
Geopos [key] [元素]:获取指定元素的经度纬度
获取两地之间的距离
Geodist [key] [元素1] [元素2]:获取元素1和元素2之间的距离
单位:
m:表示单位米
km:表示单位千米
Redis会根据两个经纬度的值进行计算得出两个地点间的距离。
获取某个元素附近的元素
以给定元素为原点,找出半径内的所有元素,这个功能是不是可以实现我们搜索附近的人,假如我当前位置经度纬度为 110 30 现在要找出记录这个点周围1000km内的城市
GEORADIUS [key] [当前位置经度] [当前位置纬度] [查找的范围]
找查附近的城市并显示与城市的距离,在原命令上增加 withdist参数
找查附近的城市并显示附近城市的经纬度,在原命令上增加 withcoord参数
查找指定个数的附近的城市,在原命令上增加 count参数
查找某个元素周围的元素
上面是通过我自定义的经纬度经查找,还可以换一种方式,以某个存在redis中的元素,查找这个元素附件的元素。
其实redis GEO底层原理是通过zsets实现的,所以一些zset命令也都可以使用,例如
查找key中的所有元素
------------------------------------------------END-----------------------------------------------------------------
你的一个赞一个关注是我创作的动力,是我持续输出的能量源泉,老铁关注一波吧!