Redis介绍

Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。有字符串,链表、哈希、集合和有序集合5种。支持在服务器端计算集合的并、交和补集(difference)等,还支持多种排序功能。所以Redis也可以被看成是一个数据结构服务器。Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);也可以把每一次数据变化都写入到一个append only file(aof)里面(这称为“全持久化模式”)

1、redis-benchmark

redis基准信息,redis服务器性能检测
redis-benchmark -h localhost -p 6379 -c 100 -n 100000 
100个并发连接,100000个请求,检测host为localhost 端口为6379的redis服务器性能 

[root@Architect redis-1.2.]# redis-benchmark -h localhost -p  -c  -n
====== PING ======
requests completed in 0.41 seconds
parallel clients
bytes payload
keep alive: 0.01% <= milliseconds
23.09% <= milliseconds
85.82% <= milliseconds
95.60% <= milliseconds
97.20% <= milliseconds
97.96% <= milliseconds
98.83% <= milliseconds
99.41% <= milliseconds
99.70% <= milliseconds
99.99% <= milliseconds
100.00% <= milliseconds
24274.27 requests per second

2、redis-cli

redis-cli -h localhost -p 6380 monitor 
Dump all the received requests in real time; 
监控host为localhost,端口为6380,redis的连接及读写操作 

[root@Architect redis-1.2.]# redis-cli -h localhost -p  monitor
+OK
+1289800615.808225 "monitor"
+1289800615.839079 "GET" "name"
+1289800615.853694 "PING"
+1289800615.853783 "PING"
+1289800615.854646 "PING"
+1289800615.854974 "PING"
+1289800615.857693 "PING"
+1289800615.866862 "PING"
+1289800615.871944 "PING"
redis-cli -h localhost -p 6380 info 
Provide information and statistics about the server ; 
提供host为localhost,端口为6380,redis服务的统计信息 

[root@Architect redis-1.2.]# redis-cli -h localhost -p  info
redis_version:2.0.
redis_git_sha1:
redis_git_dirty:
arch_bits:
multiplexing_api:epoll
process_id:
uptime_in_seconds:
uptime_in_days:
connected_clients:
connected_slaves:
blocked_clients:
used_memory:
used_memory_human:4.25M
changes_since_last_save:
bgsave_in_progress:
last_save_time:
bgrewriteaof_in_progress:
total_connections_received:
total_commands_processed:
expired_keys:
hash_max_zipmap_entries:
hash_max_zipmap_value:
pubsub_channels:
pubsub_patterns:
vm_enabled:
role:slave
master_host:localhost
master_port:
master_link_status:up
master_last_io_seconds_ago:
db0:keys=,expires=

3、redis-stat

redis-stat host localhost port 6380 overview
Print general information about a Redis instance;
实时打印出host为localhost,端口为6380,redis实例的总体信息

[root@Architect redis-1.2.]# redis-stat port  overview
------- data ------ ------------ load ----------------------------- - childs -
keys used-mem clients requests connections
5.37M (+)
5.38M (+)
5.38M (+)
5.39M (+)
5.40M (+)
5.41M (+)

redis-stat host localhost port 6380 overview
Measure Redis server latency;
输出host为localhost,端口为6380,redis服务中每个请求的响应时长

[root@Architect redis-1.2.]# redis-stat port  latency
: 0.16 ms
: 0.11 ms
: 0.15 ms
: 0.11 ms
: 0.18 ms
: 0.14 ms

二、 Redis监控

首先判断客户端和服务器连接是否正常

# 客户端和服务器连接正常,返回PONG
redis> PING
PONG
 
# 客户端和服务器连接不正常(网络不正常或服务器未能正常运行),返回连接异常
redis 127.0.0.1:> PING
Could not connect to Redis at 127.0.0.1:: Connection refused

Redis 监控最直接的方法就是使用系统提供的 info 命令,只需要执行下面一条命令,就能获得 Redis 系统的状态报告。

redis-cli info

结果会返回 Server、Clients、Memory、Persistence、Stats、Replication、CPU、Keyspace 8个部分。从info大返回结果中提取相关信息,就可以达到有效监控的目的。

先解释下各个参数含义

# Server
redis_version:2.8.                     # Redis 的版本
redis_git_sha1:
redis_git_dirty:
redis_build_id:bf5d1747be5380f
redis_mode:standalone
os:Linux 2.6.-220.7..el6.x86_64 x86_64
arch_bits:
multiplexing_api:epoll
gcc_version:4.4.                       #gcc版本
process_id:                        # 当前 Redis 服务器进程id
run_id:bbd7b17efcf108fdde285d8987e50392f6a38f48
tcp_port:
uptime_in_seconds:               # 运行时间(秒)
uptime_in_days:                       # 运行时间(天)
hz:
lru_clock:
config_file:/home/s/apps/RedisMulti_video_so/conf/zzz.conf
 
# Clients
connected_clients:                     #连接的客户端数量
client_longest_output_list:
client_biggest_input_buf:
blocked_clients:
 
# Memory
used_memory:                       #Redis分配的内存总量             
used_memory_human:.59K
used_memory_rss:                 #Redis分配的内存总量(包括内存碎片)
used_memory_peak:
used_memory_peak_human:170.70M           #Redis所用内存的高峰值
used_memory_lua:
mem_fragmentation_ratio:104.07           #内存碎片比率
mem_allocator:tcmalloc-2.0
 
# Persistence
loading:
rdb_changes_since_last_save:            #上次保存数据库之后,执行命令的次数
rdb_bgsave_in_progress:                 #后台进行中的 save 操作的数量
rdb_last_save_time:            #最后一次成功保存的时间点,以 UNIX 时间戳格式显示
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:
rdb_current_bgsave_time_sec:-
aof_enabled:                            #redis是否开启了aof
aof_rewrite_in_progress:
aof_rewrite_scheduled:
aof_last_rewrite_time_sec:-
aof_current_rewrite_time_sec:-
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
 
# Stats
total_connections_received:          #运行以来连接过的客户端的总数量
total_commands_processed:          # 运行以来执行过的命令的总数量
instantaneous_ops_per_sec:
rejected_connections:
sync_full:
sync_partial_ok:
sync_partial_err:
expired_keys:                       #运行以来过期的 key 的数量
evicted_keys:                           #运行以来删除过的key的数量
keyspace_hits:                       #命中key 的次数
keyspace_misses:                     #没命中key 的次数
pubsub_channels:                        #当前使用中的频道数量
pubsub_patterns:                        #当前使用中的模式数量
latest_fork_usec:
 
# Replication
role:master                              #当前实例的角色master还是slave
connected_slaves:
master_repl_offset:
repl_backlog_active:
repl_backlog_size:
repl_backlog_first_byte_offset:
repl_backlog_histlen:
 
# CPU
used_cpu_sys:1551.61
used_cpu_user:1083.37
used_cpu_sys_children:2.52
used_cpu_user_children:16.79
 
# Keyspace
db0:keys=,expires=,avg_ttl=             #各个数据库的 key 的数量,以及带有生存期的 key 的数量

内存使用

如果 Redis 使用的内存超出了可用的物理内存大小,那么 Redis 很可能系统会被杀掉。针对这一点,你可以通过 info 命令对 used_memory 和 used_memory_peak 进行监控,为使用内存量设定阀值,并设定相应的报警机制。当然,报警只是手段,重要的是你得预先计划好,当内存使用量过大后,你应该做些什么,是清除一些没用的冷数据,还是把 Redis 迁移到更强大的机器上去。

持久化

如果因为你的机器或 Redis 本身的问题导致 Redis 崩溃了,那么你唯一的救命稻草可能就是 dump 出来的rdb文件了,所以,对 Redis dump 文件进行监控也是很重要的。可以通过对rdb_last_save_time 进行监控,了解最近一次 dump 数据操作的时间,还可以通过对rdb_changes_since_last_save进行监控来获得如果这时候出现故障,会丢失(即已改变)多少数据。

Keys

通过获取Keyspace中的结果得到各个数据库中key的数量

QPS

即每分钟执行的命令个数,即:(total_commands_processed2-total_commands_processed1)/span,为了实时得到QPS,可以设定脚本在后台运行,记录过去几分钟的total_commands_processed。在计算QPS时,利用过去的信息和当前的信息得出QPS的估计值。

三、 showlog功能

Redis 有一个实用的slowlog功能,正如你可以猜到的,可以让你检查运行缓慢的查询。

Slowlog 将会记录运行时间超过Y微秒的最后X条查询. X 和 Y 可以在 redis.conf 或者在运行时通过 CONFIG 命令:

CONFIG SET slowlog-log-slower-than
CONFIG SET slowlog-max-len

slowlog-log-slower-than 是用来设置微秒数的, 因此上面的设置将记录执行时间超过5秒的查询. 要获取记录的日志,你可以使用 SLOWLOG GET X 命令, 这里 X 是你想要获取的记录条数:

SLOWLOG GET 

四、Redis中统计各种数据大小的方法

Redis 内存比较大的话,我们就不太容易查出是哪些(种)键占用的空间。

有一些工具能够提供必要的帮助,比如 redis-rdb-tools 可以直接分析 RDB 文件来生成报告

五、超强、超详细Redis数据库入门教程

http://www.jb51.net/article/56448.htm

http://www.yiibai.com/redis/

六、 Redis操作命令总结

http://www.jb51.net/article/61793.htm

redis状态与性能监控的更多相关文章

  1. <JVM下篇:性能监控与调优篇>01-概述篇-02-JVM监控及诊断工具-命令行篇

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  2. Redis基础与性能调优

    Redis是一个开源的,基于内存的结构化数据存储媒介,可以作为数据库.缓存服务或消息服务使用. Redis支持多种数据结构,包括字符串.哈希表.链表.集合.有序集合.位图.Hyperloglogs等. ...

  3. 《深入理解Java虚拟机》虚拟机性能监控与故障处理工具

    上节学习回顾 从课本章节划分,<垃圾收集器>和<内存分配策略>这两篇随笔同属一章节,主要是从理论+实验的手段来讲解JVM的内存处理机制.好让我们对JVM运行机制有一个良好的概念 ...

  4. 前端性能监控方案window.performance 调研(转)

    1. 业界案例 目前前端性能监控系统大致为分两类:以GA为代表的代码监控和以webpagetest为代表的工具监控. 代码监控依托于js代码并部署到需监控的页面,手动计算时间差或者使用浏览器的的API ...

  5. Apache服务器性能监控

    Apache服务器性能监控 1.使用自带mod_status模块监控 1)加载mod_status.so 模块 在httpd.conf中打开LoadModule status_module modul ...

  6. jvm性能监控与故障处理工具

    jdk为我们提供了一系列的jvm性能监控和故障处理工具,在这里根据学习进度进行整理记录.便于之后查阅 1.jps 虚拟机进程工具  类似于Linux系统中的ps命令,用于查看虚拟机进程,常用的有以下功 ...

  7. cAdvisor0.24.1+InfluxDB0.13+Grafana4.0.2搭建Docker1.12.3 Swarm集群性能监控平台

    目录 [TOC] 1.基本概念 ​ 既然是对Docker的容器进行监控,我们就不自己单独搭建cAdvisor.InfluxDB.Grarana了,本文中这三个实例,主要以Docker容器方式运行. 本 ...

  8. 第21/24周 性能监控(PAL工具)

    大家好,欢迎来到性能调优培训的最后一个月.在过去的5个月里,我们谈了SQL Server的各种性能相关的话题,包括性能调优的技术和问题. 但当在你面前,SQL Server没有按你预想的运行时,你会怎 ...

  9. Informix 11.5 SQL 语句性能监控方法及实现

    我们知道,在数据库应用系统中,SQL 语句的性能好坏至关重要.如果 SQL 语句性能很差,可能会导致整个数据库应用系统的性能也非常差.那么,如何监控数据库系统中 SQL 语句的性能,导致 SQL 语句 ...

随机推荐

  1. Windows Form 分页。

    其实功能实现很简单.我做的是一个通用的分页控件.项目时间很紧,可能有点粗糙.欢迎大家斧正.不说了直接贴代码吧. using System; using System.Collections.Gener ...

  2. java集合类(二)List学习

    接上篇  java集合类(一) List接口继承了Collection接口和Iterable接口,即同样含有Collection和 Iterable的特性,还有方法,其基本方法有: 1)有关添加: b ...

  3. SQL SERVER其它函数

    本篇文章还是学习<程序员的SQL金典>内容的记录,此次将讲解的是SQL SERVER常用的其它函数.(其它数据库这里就不罗列了,想看更多的可以关注<程序员的SQL金典>). 具 ...

  4. HDOJ 3547 DIY Cube 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3547 题目大意:求用$C$种颜色给立方体的8个顶点染色的本质不同的方法.两种方法本质不同即不能通过旋转 ...

  5. Nginx正确记录post日志的方法

    Nginx正确记录post日志的方法 事实上可以很简单,这取决于把 access_log 放在哪个 location 里面. 一,放到包含fastcgi_pass或proxy_pass的Locatio ...

  6. 在IDEA上用python来连接集群上的hive

    1.在使用Python连接hive之前需要将hive中的文件拷贝到自己创建python项目中 cp -r apache-hive--bin/lib/py  /home/jia/Desktop 2.把h ...

  7. Android开发--解决AndroidADT开发工具不能代码提示的问题

    google android的新的开发工具,打开以后没有代码自动提示功能,下面对ADT工具的一些配置: 1.设置代码的字体 设置JAVA文件代码的字体:我这里设置的14 常规.

  8. jfinal想用到中大型项目中的项目经验分享

    jfinal 用在大项目中更加方便实用,节省无数的开发时间,代码量相对 SSH 减少 75% 至 90%,对于项目结构来说,简单提以下几点: 1:先分大模块,大模块内部可以根据划分的model分成子包 ...

  9. Code::Blocks生成的EXE文件执行错误解决:The program can't start because libgcc_s_dw2-1.dll is missing

    想用C++弄个简单东东,看有没有可行性, 开发软件,微软的太大太肿,就选用了Code::Blocks. 测试HELLO时,在工程环境中没问题的,但生成的EXE执行有问题, 报什么 libgcc_s_d ...

  10. eclipse 或MyEclipse将工程进行移动的时候会对@Override报错的处理方法

    有时候导入javaSE,javaEE,android 工程的时候,明明是刚刚用过的没有问题的工程,但重新导入的时候就报错. 提示The method ... must override a sperc ...