redis学习笔记3-其他功能

1. 慢查询分析

    客户端提交指令给redis并返回执行结果,这个过程包括如下几个步骤:

    提交指令->命令排队->执行命令->返回结果

    而慢查询只是统计执行命令的时间,因此没有慢查询并不代表客户端没有超时

慢查询配置:

slowlog-log-slower-than:慢查询阈值,即执行时间多长被定义成慢查询

slowlog-max-len:保留多少条慢查询记录,因为Redis使用了一个列表来存储慢查询日志,这个值就是列表长度

上述2个参数可以在配置文件中设置,也可以通过指令设置,如下所示

config set slowlog-log-slower-than 20000

config set slowlog-max-len 1000

config rewrite //将上述修改同步保存到配置文件中去

慢查询指令:

 slowlog get [n]:获取所有慢查询或队列前N条慢查询,每个慢查询返回值为id、发生时间、执行耗时、执行指令和参数

slowlog len:慢查询队列中元素个数

slowlog reset:清空慢查询队列

最佳实践:

slowlog-max-len:线上建议调大,如1000以上

slowlog-log-slower-than:默认为10毫秒,对于并且较高的场景,建议设置为1毫秒,如果指令耗时都在1毫秒,那么redis的OPS不到1000.

客户端网络超时故障排查:需要检查是否因慢查询引起,检查请求堆积情况,检查网络情况

可定期将慢查询日志持久化到其他数据库系统中,如MySQL

2. Pipeline

    管道pipeline它能将一批Redis命令进行组装,通过一次请求提交给Redis,再将这组Redis命令的执行结果按顺序返回给客户端。

    Pipeline是非原子的,如多个命令在执行的中间发生了异常,那么将会丢失未执行的命令。所以我们一般使用pipeline时,需要自己保证执行命令的数据安全性。

    Pipeline虽然好用,但是每次Pipeline组装的命令个数不能没有节制,否则一次组装Pipeline数据量过大,一方面会增加客户端的等待时间,另一方面会造成一定的网络阻塞,可以将一次包含大量命令的Pipeline拆分成多次较小的Pipeline来完成。

    Pipeline只能操作一个Redis实例,但是即使在分布式Redis场景中,也可以作为批量操作的重要优化手段

原生批量命令与Pipeline对比:

原生批量命令是原子的,Pipeline是非原子的

原生批量命令是一个命令对应多个key,Pipeline支持多个命令

原生批量命令是Redis服务端支持实现的,而Pipeline需要服务端和客户端的共同实现

3. Bitmaps

    Bitmaps本身不是一种数据结构,实际上它就是字符串,且每个字符只能存储0和1,每个字符在字符串中的索引叫偏移量,redis可以对这种字符串的位进行操作。

命令:

    setbit key offset value:在key对应的值的offset为止设置值value,value只能是0或1

    gitbit key offset:获取key对应offset上的值

    bitcount key [start][end]:获取key指定范围值为1的个数

    bitop op destkey key[key....]:op为操作符,如or、and、not、xor,并将计数结果保存到destkey中

    假设有2个key,key1和key2,key1保存了上个月登录用户,key2保存了这个月登录用户,

    求这2个月都登录过的用户:bitop and key3 key1 key2; bitcount key3

    求这2个月登录过的用户:bitop or key4 key1 key2; bitcount key4

应用场景:

    统计在线用户、统计活跃用户等

4. 发布订阅模式

    publish channelname message:向channelname通道发送消息

    subscribe channelname [channelname1...]:订阅某个或多个通道的消息

    unsubscribe [channel [channel ...]]:取消订阅

    psubscribe pattern [pattern...]:按照某个模式订阅,如订阅通道以IT开头的所有通道,psubscribe IT*

    punsubscribe [pattern [pattern ...]]:按照某个模式取消订阅,如 punsubscribe IT*

    pubsub channels [pattern]:查询有订阅者的通道(有一个订阅者就算),如以IT开头的通道,pubsub IT*

    pubsub numsub [channel ...]:查询通道订阅数,如查看my通道有多少订阅者,pubsub numsub my

    pubsub numpat:查看模式订阅数,即通过psubscribe指令订阅的数量

使用场景:

    聊天室、公告牌、服务之间利用消息解耦都可以使用发布订阅模式

5. GEO 地理位置信息

    Redis3.2版本提供了GEO(地理信息定位)功能,支持存储地理位置信息用来实现诸如附近位置、摇一摇这类依赖于地理位置信息的功能。

    geoadd key longitude latitude member [longitude latitude member ...]:添加地址位置信息,经度 纬度 名称,如 geoadd cities:locations 116.28 39.55 beijing

    zrem key member:删除位置信息

    geopos key member [member ...]:获取地理位置,如 geopos cities:locations tianjin

    geodist key member1 member2 [unit]:计算2地距离,unit为距离单位,如北京和天津的距离, geodist cities:locations tianjin beijing km

获取指定位置范围内的地理信息位置集合:

    georadius key longitude latitude radiusm|km|ft|mi [withcoord] [withdist]  [withhash] [COUNT count] [asc|desc] [store key] [storedist key]

    georadiusbymember key member radiusm|km|ft|mi [withcoord] [withdist] [withhash] [COUNT count] [asc|desc] [store key] [storedist key]

    georadius和georadiusbymember两个命令的作用是一样的,都是以一个地理位置为中心算出指定半径内的其他地理信息位置,不同的是georadius命令的中心位置给出了具体的经纬度,georadiusbymember只需给出成员即可。其中radiusm|km|ft|mi是必需参数,指定了半径(带单位),这两个命令有很多可选参数,如下所示:

    ·withcoord:返回结果中包含经纬度。

    ·withdist:返回结果中包含离中心节点位置的距离。

    ·withhash:返回结果中包含geohash,有关geohash后面介绍。

    ·COUNT count:指定返回结果的数量。

    ·asc|desc:返回结果按照离中心节点的距离做升序或者降序。

    ·store key:将返回结果的地理位置信息保存到指定键。

    ·storedist key:将返回结果离中心节点的距离保存到指定键。

    例子:距离北京150公里以内的城市

    georadiusbymember cities:locations beijing 150 km

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值