Redis提供了5种数据结构已经足够强大,但除此之外,Redis还提供了诸如慢查询分析、功能强大的Redis Shell、Pipeline、事务与Lua脚本、Bitmaps、HyperLogLog、发布订阅、GEO等附加功能,这些功能可以在某些场景发挥重要作用。

  • 慢查询分析:通过慢查询分析,找出有问题的命令进行优化;
  • Redis Shell:功能强大的Redis Shell会有意想不到的使用功能;
  • Pipeline:通过Pipeline(管道或者流水线)机制有效提高客户端性能;
  • 事务与Lua:制作自己的专属原子命令;
  • Bitmaps:通过在字符串数据结构上使用位操作,有效节省内存,为开发提供了新思路;
  • HyperLogLog:一种基于概率的新算法,难以想象地节省内存空间;
  • 发布订阅:基于发布订阅的消息通信机制;
  • GEO:Redis 3.2提供了基于地理位置信息的功能。

1、慢查询分析

许多存储系统(例如Mysql)提供慢查询日志帮助开发人员和运维人员定位系统中存在的慢操作。所谓慢查询日志就是系统在命令执行前后计算每条命令执行的时间,当超过预设阈值,就将这条命令的相关信息(例如:发生时间、耗时、命令的详细信息)记录下来,Redis也提供了类似功能。

如图3-1所示,Redis客户端执行一条命令分为如下4个部分:

  • 发送命令
  • 命令排队
  • 命令执行
  • 返回结果

注意,慢查询只统计步骤3的时间,所以没有慢查询并不代表客户端没有超时问题。

1.1 慢查询的两个配置参数

对于慢查询功能,需要明确两件事:

  • 预设阈值怎么设置?
  • 慢查询记录存在在哪?

Redis提供了slowlog-log-slower-than和slowlog-max-len配置来解决这两个问题。从字面意思就可以看出,slowlog-log-slower-than就是预设的阈值,它的单位是微秒(1秒=1000毫秒=1000 000微秒),默认值时10 000,假如执行了一条“很慢”的命令(例如keys *),如果它的执行时间超过了10 000微秒,那么它将被记录在慢查询日志中。slowlog-max-len只说明了慢查询日志最多能存储多少条,并没有说明存放在哪里,实际上Redis使用了一个列表来存储慢查询日志,slowlog-max-len就是这个列表的最大长度。一个新的命令满足慢查询条件时被插入到这个列表中,当查询日志列表已处于其最大长度时,最早插入的一个命令将被从列表中移出。例如slowlog-max-len设置为5,当有第6条慢查询日志插入时,则队头的第一条数据就会出列,第6条慢查询就会入列。

在Redis中有两种修改配置的方法,一种是修改配置文件,另一种就是使用config set 命令动态修改。例如下面使用config set 命令将slowlog-log-slower-than设置为20 000微秒,slowlog-max-len设置为1000。

 config set slowlog-log-slower-than
config set slowlog-max-len
config rewrite

如果要Redis将配置持久化到本地配置文件,需要执行 config rewrite 命令。

虽然慢查询日志是存放在Redis内存列表中的,但是Redis并没有暴露这个列表的键,而是通过一组命令来实现对慢查询日志的访问和管理。下面就介绍这几个命令。

(1)获取慢查询日志

 slowlog get [n]

下面的操作返回当前Redis的慢查询,参数n可以指定条数:

可以看到每个慢查询日志有4个属性组成,分别是慢查询日志的标识id、发生时间戳、命令耗时和参数。

(2)获取慢查询日志列表当前长度

 slowlog len

(3)慢查询日志重置

 slowlog reset

实际上reset命令是对列表做清理操作。

1.2 慢查询总结

慢查询功能可以有效的帮助我们找到Redis可能存在的瓶颈,但在实际使用过程中还需要注意一下几点:

(1)slowlog-max-len配置建议:线上建议加大慢查询列表,记录慢查询时Redis会对常命令做阶段操作,并不会占用大量内存。慢查询列表可以减缓查询被剔除的可能,例如线上可设置为1000以上。

(2)slowlog-log-slower-than配置建议:默认值超过10毫秒判定为慢查询,需要根据Redis的并发量对该值进行调整。由于Redis采用单线程响应命令,对于高流量的场景,如果命令执行时间在1毫秒以上,那么Redis最多可支撑QPS不到1000。因此对于高QPS场景的Redis建议设置为1毫秒。

(3)慢查询只记录命令查询时间,并不包括命令排队和网络传输时间。为此客户端执行命令的时间会大于实际执行时间。因为命令执行排队机制,慢查询会导致其它命令级联阻塞,因此当客户端出现请求超时,需要检查该时间点是否有对应的慢查询,从而分析出是否为慢查询导致的命令级联阻塞。

(4)由于慢查询日志是一个先进先出的队列,也就是说如果慢查询比较多的情况下,可能丢失部分慢查询命令,为了防止这种情况的发生,可以定期执行slow get 命令将慢查询日志持久化到其它存储中(例如Mysql),然后可以制定可视化界面进行查询。

2、Redis Shell

Redis提供了redis-cli、redis-server、redis-benchmark等Shell工具。

[待补充]

【redis 学习系列07】Redis小功能大用处01 慢查询分析以及Redis Shell的更多相关文章

  1. 【redis 学习系列08】Redis小功能大用处02 Pipeline、事务与Lua

    3.Pipeline 3.1 Pipeline概念 Redis客户端执行一条命令分为如下四个过程: (1)发送命令 (2)命令排队 (3)命令执行 (4)返回结果 其中(1)和(4)称为Round T ...

  2. Redis 发布订阅,小功能大用处,真没那么废材!

    今天小黑哥来跟大家介绍一下 Redis 发布/订阅功能. 也许有的小伙伴对这个功能比较陌生,不太清楚这个功能是干什么的,没关系小黑哥先来举个例子. 假设我们有这么一个业务场景,在网站下单支付以后,需要 ...

  3. redis小功能大用处-bitmaps

  4. 分布式缓存技术redis学习系列(五)——redis实战(redis与spring整合,分布式锁实现)

    本文是redis学习系列的第五篇,点击下面链接可回看系列文章 <redis简介以及linux上的安装> <详细讲解redis数据结构(内存模型)以及常用命令> <redi ...

  5. 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

    本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...

  6. 分布式缓存技术redis学习系列

    分布式缓存技术redis学习系列(一)--redis简介以及linux上的安装以及操作redis问题整理 分布式缓存技术redis学习系列(二)--详细讲解redis数据结构(内存模型)以及常用命令 ...

  7. redis学习系列

    redis学习系列 基本看完 最近在看redis的代码,简单记录下自己认为重要的点,自己写比较费时间的,我会把查到的资料贴出来方便查看 淘宝的redis内存分析 http://www.searchtb ...

  8. C# Redis学习系列三:Redis配置主从

    Redis配置主从 主IP :端口      192.168.0.103 6666 从IP:端口       192.168.0.108 3333 配置从库 (1)安装服务: redis-server ...

  9. Python操作redis学习系列之(集合)set,redis set详解 (六)

    # -*- coding: utf-8 -*- import redis r = redis.Redis(host=") 1. Sadd 命令将一个或多个成员元素加入到集合中,已经存在于集合 ...

随机推荐

  1. SP338ROADS题解--最短路变式

    题目链接 https://www.luogu.org/problemnew/show/SP338 分析 联想到不久前做过的一道题\(Full\) \(Tank\),感觉可以用优先队列做,于是写了\(d ...

  2. 连接Linux远程桌面的几个方法

    有下面五种方法: 一.通过xshell或putty直接调用程序窗口(通过ssh命令行连接). 二.通过xbrower连接Linux完整的桌面. 通过xshell直接调用程序窗口. rhel5的gdm的 ...

  3. echarts和v-chart使用心得

    echarts的响应式 每次窗口大小改变的时候都会触发onresize事件,这个时候我们将echarts对象的尺寸赋值给窗口的大小这个属性,从而实现图表对象与窗口对象的尺寸一致的情况window.on ...

  4. 5.SpringMVC 配置式开发-处理器适配器

    处理器适配器HandlerAdapter 1.SimpleControllerHandlerAdapter(默认) 所有实现了 Controller 接口的处理器 Bean,均是通过SimpleCon ...

  5. PPT 设置幻灯片母版

    现在我设计了一个PPT背景,我想新建幻灯片的时候,直接就是以这个背景展现,并把这个背景作用于左右的幻灯片. 1.选中第二页幻灯片,CTRL + C 复制一下 2.点击视图,幻灯片母版,背景样式,点击下 ...

  6. Centos7.4下安装Python3

    安装Python3 安装依赖包 yum -y groupinstall "Development tools" yum -y install zlib-devel bzip2-de ...

  7. web开发:web前端初识

    一.前端三剑客 二.编辑器 三.第一个页面 四.基本标签 五.标签分类 一.前端三剑客 html:完成页面架构的搭建 css:完成页面样式布局 js:完成页面功能 二.编辑器 插件: 插件管理器 ct ...

  8. 踏步-java工具类

    /** * @Title:removeDuplicate * @author:踏步 * @date:2019年5月23日 下午2:31:40 * @Description:TODO 去除list的重复 ...

  9. 学习kafka笔记

    一:概念 Kafka是一个分布式的消息队列,相当于我们生活中的快递柜,快递点,快递员将快递放到快递柜中,收件人去取,把快递(消息)的入柜(入队)和处理进行解耦,使得双方以自己合适的时间和频率处理快递, ...

  10. VS2017 Nuget服务器搭建,简易版

    熟悉Visual Studio 的小伙伴肯定听说过“Nuget”这个词,关于Nuget是如何如何方便就不再赘述了,这里主要介绍一下如何搭建个人的Nuget服务器. 直奔主题 第一步:打开VS2017 ...