Redis 实现附近的人,linux 在线学习
"1"
添加多个位置信息
127.0.0.1:0>GEOADD diner:location 121.4465774 31.20485103 'lisi' 121.44534 31.2031 'wangwu' 121.4510648 31.2090667 'zhangliu'
"3"
底层使用的 sortedSet 存储。
计算距离。
key member1 member2 [unit]
, 其中 unit 为单位 m|km|ft(英尺)|mi(英里)
计算两点间的距离,返回距离的单位是米(m)
127.0.0.1:0>GEODIST diner:location zhangsan lisi m
"82.4241"
计算两点间的距离,返回距离的单位是千米(km)
127.0.0.1:0>GEODIST diner:location zhangsan lisi km
"0.0824"
key member [member …]
返回一个或多个位置元素的 Geohash。保存到 Redis 中是用 Geohash 位置 52 点整数编码。
GeoHash 将二维经纬度转换成字符串。比如下图展示了北京 9 个区域的 GeoHash 字符串,分别是 WX4ER,WX4G2、WX4G3 等,每一个字符串代表了某一矩形区域。
即这个矩形区域内所有的点(经纬度坐标)都共享相同的 GeoHash 字符串,这样既可保护隐私(只表示大概区域位置而非具体点),又容易做缓存。
比如左上角区域内的用户不断发送位置信息请求餐馆数据,由于这些用户的 GeoHash 字符串都是 WX4ER,所以可把 WX4ER 当作 key,把该区域的餐馆信息当作 value 来进行缓存,而若不使用 GeoHash,由于区域内的用户传来的经纬度各不相同的,很难做缓存。字符串越长,表示的范围越精确。

从 key 里返回所有给定位置元素的位置(经度和纬度)。
key member [member …]
返回 zhangsan 和 lisi 的位置信息
127.0.0.1:0>GEOPOS diner:location zhangsan lisi
"121.44661813974380493"
"31.20559220971455971"
"121.44657522439956665"
"31.20485207113603821"
key longitude latitude radius m|km|ft|mi
[WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]
给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
范围可以使用以下其中一个单位:
m 表示单位为米
km 表示单位为千米
mi 表示单位为英里
ft 表示单位为英尺
在给定以下可选项时, 命令会返回额外的信息:
WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致
WITHCOORD: 将位置元素的经度和维度也一并返回
WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。
命令默认返回未排序的位置元素。 通过以下两个参数, 用户可以指定被返回位置元素的排序方式:
ASC
根据中心的位置, 按照从近到远的方式返回位置元素。
DESC
根据中心的位置, 按照从远到近的方式返回位置元素。
在默认情况下, GEORADIUS 命令会返回所有匹配的位置元素。 虽然用户可以使用 COUNT 选项去获取前 N 个匹配元素, 但是因为命令在内部可能会需要对所有被匹配的元素进行处理, 所以在对一个非常大的区域进行搜索时, 即使只使用 COUNT 选项去获取少量元素, 命令的执行速度也可能会非常慢。 但是从另一方面来说, 使用 COUNT 选项去减少需要返回的元素数量, 对于减少带宽来说仍然是非常有用的。
以 121.446617 31.205593(张三位置)为圆心,3000m 为半径,查询返回用户及其位置
127.0.0.1:0>GEORADIUS diner:location 121.446617 31.205593 3000 m WITHCOORD
"wangwu"
"31.20310057881493293"
"lisi"
"31.20485207113603821"
"zhangsan"
"31.20559220971455971"
"zhangliu"
"31.20906731242401833"
以 121.446617 31.205593(张三位置)为圆心,3000m 为半径,查询返回用户及其距离(单位是米)
127.0.0.1:0>GEORADIUS diner:location 121.446617 31.205593 3000 m WITHDIST
"wangwu"
"302.6202"
"lisi"
"82.5066"
"zhangsan"
"0.1396"
"zhangliu"
"573.0651"
以 121.446617 31.205593(张三位置)为圆心,3000m 为半径,查询返回用户及其距离(单位是米) 由近及远
47.110.246.98:15>GEORADIUS diner:location 121.446617 31.205593 3000 m WITHDIST ASC
"zhangsan"
"0.1396"
"lisi"
"82.5066"
"wangwu"
"302.6202"
"zhangliu"
"573.0651"
以 121.446617 31.205593(张三位置)为
《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》
【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享
圆心,3000m 为半径,查询返回用户及其 GeoHash 值
127.0.0.1:0>GEORADIUS diner:location 121.446617 31.205593 3000 m WITHHASH
"wangwu"
"4054756135204337"
"lisi"
"4054756138536712"
"zhangsan"
"4054756138736536"
"zhangliu"
"4054756186304127"
最后的话
无论是哪家公司,都很重视 Spring 框架技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,好了希望这篇文章对大家有帮助!
部分截图:

评论