autojs 如何获取控件的desc_Redis如何让你加到了附近的人

  近水楼台之GeoHash

  Redis3.2开始的Geo模块.可通过二维的经纬度表示.使用勾股定理算出元素之间的距离,通过矩形区域现定元素数量,然后按着距离排序。其次,交友软件中附近的人非常频繁,所以推出了Redis的地址位置距离排序算法GeoHash。

  本质上GeoHash算是一种数据结构吗?不是的,本质上还是zset,对应的操作就是skiplist,

 Redis中处理这些地理位置坐标点的思想是:二维平面坐标点 --> 一维整数编码值 --> zset(score为编码值) --> zrangebyrank(获取score相近的元素)、zrangebyscore --> 通过score(整数编码值)反解坐标点 --> 附近点的地理位置坐标。

 33f42c2e69f29db261ed87232f202d35.png

基本命令

GEOADD key longitude latitude member [longitude latitude member ...]

字段的介绍:

key标识一个地理位置的集合。

longitude latitude member标识了一个地理位置的坐标。

longitude是地理位置的经度,

latitude是地理位置的纬度。

member是该地理位置的名称。

geoAdd可以批量给集合添加一批地理位置

dc9b214f776fe70e9884fc3c6a3111ec.png

geopos 可以获取地理位置的坐标,可以批量获取多个地理位置的坐标,命令格式为:GEOPOS key member [member ...]

87afc65f9b45558c7164e06fe6af8945.png

geodist 用来获取两个地理位置的距离,命令格式为:

单位可以指定为以下四种类型:

m:米,距离单位默认为米,不传递该参数则单位为米。

km:公里。

mi:英里。

ft:英尺。

31789d9d17aa0eb064d1783c1de11937.png

georadius 可以根据给定地理位置坐标获取指定范围内的地理位置集合。命令格式为:

GEORADIUS key longitude latitude radius [m|km|ft|mi] [WITHCOORD] [WITHDIST] [ASC|DESC] [WITHHASH] [COUNT count]

longitude latitude标识了地理位置的坐标,

radius表示范围距离,距离单位可以为m|km|ft|mi,还有一些可选参数:

WITHCOORD:传入WITHCOORD参数,则返回结果会带上匹配位置的经纬度。

WITHDIST:传入WITHDIST参数,则返回结果会带上匹配位置与给定地理位置的距离。

ASC|DESC:默认结果是未排序的,传入ASC为从近到远排序,传入DESC为从远到近排序。

WITHHASH:传入WITHHASH参数,则返回结果会带上匹配位置的hash值。

COUNT count:传入COUNT参数,可以返回指定数量的结果。

georadiusbymember  可以根据给定地理位置获取指定范围内的地理位置集合。

georadius命令传递的是坐标,

georadiusbymember传递的是地理位置。

georadius更为灵活,

可以获取任何坐标点范围内的地理位置。但是大多数时候,只是想获取某个地理位置附近的其他地理位置,使用georadiusbymember则更为方便。

georadiusbymember命令格式为(命令可选参数与georadius含义一样):

georadiusbymember key member radius [m|km|ft|mi] [WITHCOORD] [WITHDIST] [ASC|DESC] [WITHHASH] [COUNT count]

c6287d0f28549a9cc0c6e49fe98c2a1c.png

他不会排除自身

因为附近应用中出现的数据会出现大量的餐馆,加油站等,建议按城市,区域等进行划分来降低单个集合的大小。

众里寻他千百度   scan

如何在成千上万个key中删除特定前缀的key或者修改呢。

0cc61bda007afc77addb65cda0a437d8.png

5973923c3ffbbf575208a03b49e83ce2.png

keys*是遍历算法,复杂度是O(n),如果满足条件的是几百万个大数据量则满屏刷屏,造成卡顿

sacn复杂度也是O(n),但是他是通过游标分步进行的,不会阻塞线程

啥是游标分布?每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程。

语法

redis Scan 命令基本语法如下:

SCAN cursor [MATCH pattern] [COUNT count]
  • cursor - 游标。

  • pattern - 匹配的模式。

  • count - 指定从数据集里返回多少元素,默认值为 10 。

7f21b3a5841328c27a2515aba306af1a.png

大key扫描

redis-cli -h 127.0.0.1 -p7001 --bigkeys

预防ops报警

redis-cli -h 127.0.0.1 -p7001 --bigkeys -i 0.1

24b233bbc5517ecbd87dd4069247aad9.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值