1

redis-cli命令的 --stat选项

关于stat选项,官网也是介绍的比较简单。使用redis-cli命令加上stat选项可以实时监视redis实例,比如当前节点内存中缓存的 key总数以及每秒处理请求数等。stat默认每隔一秒会输出一行信息,如果需要改变频率可使用-i <interval> 指定频率,单位为秒,如--stat -i 100。需要配合-h选项使用。

关于requests与connections官方也没有介绍,自己结合本地和线上的输出,做了对比得出的结论。

 ------- data ------ --------------------- load -------------------- - child -
keys mem clients blocked requests connections
97146 6.82G 1724 0 60068357585 (+49536) 93936323
97146 6.82G 1724 0 60068403702 (+46117) 93936323
97146 6.82G 1724 0 60068451875 (+48173) 93936323
97146 6.82G 1724 0 60068496037 (+44162) 93936323
  • keys:当前节点缓存的key总数
  • mem:当前节点缓存总的占用内存
  • clients:当前节点的活跃连接数,或者说未断开连接的总连接数
  • blocked:当前节点正在等待阻塞命令的数量
  • requests:当前处理的请求数,与上一次请求数相减可知1秒所处理的请求,或者说所执行的命令数。
  • connections:是历史连接总数,即到目前为止,一共新建了多少个连接。与前一次相减,可以得出一秒内新建的连接数。

Requests列括号里的数是每间隔所处理的命令数。比如当前60068496037减去前一次60068451875 等于44162,由于stat默认频率是每秒输出一次,44162就是每秒执行4万多条命令。正好是括号里面的数字,也因此可以知道,括号里面的数字代表每秒(interval)执行的命令数。

当然--stat每秒输出一次结果也是一条命令,所以在没有任何请求的情况下,你看到的requests是自增的,可以本地起个redsi服务,然后使用redis-cli --stat观察下输出。

Blocked并不是排队等待执行的命令数,而是客户端执行阻塞命令的总数。比如BLPOP。

Connections也是很有用的参数,如果发现connections与前一次的差值很大,且很频繁,那就要看下代码中连接池配置是否生效了。

网络延迟也是我们要关注的问题

redis-cli命令--latency选项可以测试当前服务器与redis某个节点的网络延迟。

>src/redis-cli --latency -h 172.31.1.1
min: 0, max: 12, avg: 0.25 (1047 samples)

avg:0.25,即延迟为250μs。如果通过外网连接网络延迟会很高,比如跨机房的redis调用,延迟高的情况下使用redis反而比使用本地硬盘读写性能更差。

还有其它影响redis性能的因素,比如内存的使用,持久化策略等。

AOF持久化策略影响性能问题

如果数据不需要持久化,或者要求不严格,建议直接禁用掉AOF持久化策略,同时RDB快照的保存时间间隔也要调高一些,比如一小时一次,以此达到更高的性能。

# 是否开启持久化策略
# (支持同时开启RDB和AOF,即混合策略)
appendonly no # yes: 在aof重写期间不做fsync刷盘操作,可能丢失整个AOF重写期间的数据,
no-appendfsync-on-rewrite yes # fsync针对单个文件操作(比如AOF文件),做强制硬盘同步,fsync将阻塞直到写入硬盘完成后返回,保证了数据持久化。
# always:每次写入都要同步AOF文件。
# no:同步硬盘操作由操作系统负责,通常同步周期为30秒,数据安全性无法保证。
# everysec:由专门线程每秒同步一次fsync。理论上只有在系统突然宕机的情况下丢失1秒的数据。
appendfsync no #当前aof文件大小与上次重写后文件大小的比值超过该值时进行重写,200即等于之前的2倍
auto-aof-rewrite-percentage 200 #当aof文件大小大于该值时进程重写,以减小aof文件占用的磁盘空间
auto-aof-rewrite-min-size 64mb

1)主线程负责写入AOF缓冲区。

2)AOF线程负责每秒执行一次同步磁盘操作,并记录最近一次同步时间。

3)主线程负责对比上次AOF同步时间。如果距上次同步成功时间在2秒内,主线程直接返回;如果距上次同步成功时间超过2秒,主线程将会阻塞,直到同步操作完成。

如果系统fsync缓慢,将会导致Redis主线程阻塞影响效率。

上次我将一千两百万记录的ip库数据写入redis时,就因为开启了aof持久化策略,由于大批量数据的写入,导致aof文件几乎每秒重写一次,后面改为1g时重写也因为文件过大重写时间长,没有一次能够成功将一千两百万数据成功写入的。

redis之性能优化的更多相关文章

  1. redis服务器性能优化

    1.系统内存OOM优化 vm.overcommit_memory Redis会占用非常大内存,所以通常需要关闭系统的OOM,方法为将“/proc/sys/vm/overcommit_memory”的值 ...

  2. 15套java架构师、集群、高可用、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...

  3. java架构师负载均衡、高并发、nginx优化、tomcat集群、异步性能优化、Dubbo分布式、Redis持久化、ActiveMQ中间件、Netty互联网、spring大型分布式项目实战视频教程百度网盘

    15套Java架构师详情 * { font-family: "Microsoft YaHei" !important } h1 { background-color: #006; ...

  4. 15套java架构师、集群、高可用、高可扩 展、高性能、高并发、性能优化Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩 展 ...

  5. Redis各种数据结构性能数据对比和性能优化实践

    很对不起大家,又是一篇乱序的文章,但是满满的干货,来源于实践,相信大家会有所收获.里面穿插一些感悟和生活故事,可以忽略不看.不过听大家普遍的反馈说这是其中最喜欢看的部分,好吧,就当学习之后轻松一下. ...

  6. 网站性能优化小结和spring整合redis

    现在越来越多的地方需要非关系型数据库了,最近网站优化,当然从页面到服务器做了相应的优化后,通过在线网站测试工具与之前没优化对比,发现有显著提升. 服务器优化目前主要优化tomcat,在tomcat目录 ...

  7. 《吐血整理》Redis 性能优化的 13 条军规!史上最全

    Redis 是基于单线程模型实现的,也就是 Redis 是使用一个线程来处理所有的客户端请求的,尽管 Redis 使用了非阻塞式 IO,并且对各种命令都做了优化(大部分命令操作时间复杂度都是 O(1) ...

  8. 吊打面试官系列:Redis 性能优化的 13 条军规大全

    1.缩短键值对的存储长度 键值对的长度是和性能成反比的,比如我们来做一组写入数据的性能测试,执行结果如下: 从以上数据可以看出,在 key 不变的情况下,value 值越大操作效率越慢,因为 Redi ...

  9. Redis 实战 —— 07. 复制、处理故障、事务及性能优化

    复制简介 P61 关系型数据库通常会使用一个主服务器 (master) 向多个从服务器 (slave) 发送更新,并使用从服务器来处理所有读请求. Redis 也采用了同样的方法实现自己的复制特性,并 ...

  10. redis性能优化、内存分析及优化

    redis性能优化.内存分析及优化 1.优化网络延时 2.警惕执行时间长的操作 3.优化数据结构.使用正确的算法 4.考虑操作系统和硬件是否影响性能 5.考虑持久化带来的开销 5.1 RDB 全量持久 ...

随机推荐

  1. ASP.NET Core – User Secrets & Azure Key Vault

    前言 以前就写过很多篇了 ASP.NET Core – Configuration & Options Asp.net core 学习笔记 ( Azure key-vault ) Asp.ne ...

  2. ASP.NET Core – Razor Pages 冷知识

    Multiple Form Binding 问题 在一个 page 里面有 2 张 form, 那么就会有 2 个 model binding. 当任何一个 submit 的时候. 由于 2 个 mo ...

  3. MyBatisPlus——简介

    概述 MyBatisPlus(简称MP)是基于MyBatisPlus框架基础上开发的增强型工具,旨在简化开发.提高效率 国内开发的技术 特性 无侵入:只做增强不做改变,不会对现有工程产生影响 强大的C ...

  4. PasteForm最佳CRUD实践,实际案例PasteTemplate详解之3000问(二)

    作为"贴代码"力推的一个CRUD实践项目PasteTemplate,在对现有的3个项目进行实战后效果非常舒服!下面就针对PasteForm为啥我愿称为最佳CRUD做一些回答: 哪里 ...

  5. /proc/slabinfo 介绍

    slabinfo - version: 2.1 # name <active_objs> <num_objs> <objsize> <objperslab&g ...

  6. KASAN 中kasan_multi_shot 的作用

    kasan_multi_shot 是 Linux 内核配置选项之一,与 Kernel Address Sanitizer (KASAN) 相关.KASAN 是一种内核内存错误检测工具,能够检测内核代码 ...

  7. 系统 内核启动期间使用ftrace

    启动阶段使能event trace 同上,配置commandline: trace_event=sched:*,timer:*,irq:* trace_buf_size=40M 有上面的实例可以知道, ...

  8. Android内存分析命令

    一.内存指标 Item 全称 含义 等价 USS Unique Set Size 物理内存 进程独占的内存 PSS Proportional Set Size 物理内存 PSS= USS+ 按比例包含 ...

  9. torch.max()使用讲解

    output = torch.max(input, dim) input输入的是一个tensor dim是max函数索引的维度0/1,0是每列的最大值,1是每行的最大值 实例: import torc ...

  10. Android复习(四)权限—>请求应用权限

    每款 Android 应用都在访问受限的沙盒中运行.如果应用需要使用其自己的沙盒外的资源或信息,则必须请求相应权限. 要声明您的应用需要某项权限,您可以在应用清单中列出该权限,然后在运行时请求用户批准 ...