栈
发表于
本文字数:
69
阅读时长 ≈
1 分钟
地理坐标
发表于
本文字数:
844
阅读时长 ≈
3 分钟
Redis 地理坐标可以存储经纬度格式的地理坐标,并对这些坐标执行距离计算、范围查找等操作。
基本命令
GEOADD
将一个或多个地理坐标添加或更新到有序集合中,返回插入元素个数。
1 | -- 返回 1.添加 qingyuan 到 Guangdong-cities 中 |
时间复杂度:O(logn * m). n 为集合中已有元素的个数,m 是需要添加地理坐标的个数。
GEOPOS
获取给定位置的坐标,包含经度和纬度,集合中不存在返回 nil。
1 | -- 113.40603142976761 22.511156445825442 |
时间复杂度:O(logn * m). n 为集合中已有元素的个数,m 是需要查询地理坐标的个数。
GEODIST
计算两个位置之间的直线距离,单位默认是米,集合中元素不存在返回 nil。
1 | -- 127364.5547 米 |
时间复杂度:O(logn)
GEORADIUS
返回以经纬度为中心,指定半径内的地理坐标。
默认情况下,返回结果是无序的,ASC 或 DESC 可以使结果有序返回。
1 | -- 以 113.4060288 22.5111574 为中心,查询半径为 200km 的地理元素 |
时间复杂度:O(n)
GEORADIUSBYMEMBER
同 GEORADIUS,只是中心为地理坐标中的一个元素。
1 | -- 以 Guangzhou 为中心,查询半径为 150km 的地理元素,返回 2 个的同时升序返回距离 |
时间复杂度:O(n)
GEOHASH
传入一个或多个位置,返回这些位置的字符串 GEOHASH 值。
不存在则返回 nil。
1 | -- ws0w0phgp70 |
时间复杂度:O(n)
总结
- Redis的GEO特性允许用户将经纬度格式的地理位置存储到Redis中,并对这些位置执行距离计算、范围查找等操作;
- GEORADIUSBYMEMBER 和 GEORADIUS 命令的作用一样,但前者使用位置,后者使用经纬度;
- Geohash 将用户给经度和纬度转换成单个Geohash值;
- 可以使用有序集合来操作地理坐标;
享元模式
发表于
本文字数:
157
阅读时长 ≈
1 分钟