Redis GEO学习笔记
1. 概述
Redis GEO是一种地理位置信息的存储和查询解决方案,它基于有序集合(Sorted Set)实现,每个元素都有一个经度和纬度坐标信息,可以使用这些信息进行距离计算和地理位置周边搜索。
2. 基本命令
2.1 添加地理位置数据
使用命令GEOADD key longitude latitude member
可以添加一条地理位置数据,其中key
表示有序集合的名称,longitude
表示经度,latitude
表示纬度,member
表示集合中的元素。
例如:
Copy CodeGEOADD cities 116.40 39.90 Beijing
GEOADD cities 121.47 31.23 Shanghai
2.2 获取地理位置数据
使用命令GEOPOS key member [member ...]
可以获取一个或多个元素的位置信息。
例如:
Copy CodeGEOPOS cities Beijing
结果为:
Copy Code1) 1) "116.40000033378601"
2) "39.90000163977838"
2.3 计算两个地理位置之间的距离
使用命令GEODIST key member1 member2 [unit]
可以计算两个元素之间的距离,unit
参数可以指定距离单位,默认为米。
例如:
Copy CodeGEODIST cities Beijing Shanghai
结果为:
Copy Code"1068394.2562"
2.4 查找指定地理位置周边的元素
使用命令GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [ASC|DESC] [COUNT count]
可以查找距离指定地理位置一定范围内的元素,其中radius
参数指定了查找半径,m|km|ft|mi
参数指定了半径单位。
例如:
Copy CodeGEORADIUS cities 116.40 39.90 1500000 km WITHDIST
结果为:
Copy Code1) 1) "Beijing"
2) "0.0000"
2) 1) "Shanghai"
2) "1068394.2562"
表示距离116.40, 39.90
坐标点1500公里以内的城市有北京和上海,其中北京与查询点距离为0公里,上海与查询点距离为1068394.2562米。
3. 实例
例如,我们可以使用Redis GEO来实现一个附近商家推荐系统。假设有一个商家列表,每个商家都有自己的经度和纬度坐标,我们可以将它们存储在一个名为merchants
的有序集合中:
Copy CodeGEOADD merchants 116.40 39.90 McDonald's
GEOADD merchants 121.47 31.23 KFC
GEOADD merchants 118.78 32.04 Starbucks
然后,当用户在某个位置时,可以使用GEORADIUS
命令查找距离该位置一定范围内的商家:
Copy CodeGEORADIUS merchants 116.50 39.90 5000 m WITHDIST
结果为:
Copy Code1) 1) "McDonald's"
2) "1109.3526"
2) 1) "KFC"
2) "277934.8350"
表示距离116.50, 39.90
坐标点5公里以内的商家有麦当劳和肯德基,其中麦当劳与查询点距离为1109.3526米,肯德基与查询点距离为277934.8350米。然后我们可以将这些商家推荐给用户。