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. java package and import

    1.Package Package类的主要作用是解决命名冲突.package中所存放的所有文件,一般分一下就分这三种 1,java程序源文件,扩展名为.java. 2,编译好的java类文件,扩展名为 ...

  2. 微软职位内部推荐-SDE2 (Windows driver)

    微软近期Open的职位: SDE2 (Windows driver) Job title: Software Development Engineer 2 Location: Shanghai, Ch ...

  3. LintCode-Search 2D Matrix II

    Write an efficient algorithm that searches for a value in an m x n matrix, return the occurrence of ...

  4. LintCode-Word Segmentation

    Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separa ...

  5. Ubuntu 查看文件以及磁盘空间大小命令df

    (1)查看文件大小 查看当前文件夹下所有文件大小(包括子文件夹)    du -sh   # du -h 15M     ./package 16K     ./.fontconfig 4.0K    ...

  6. Http之Get/Post请求区别

    Http之Get/Post请求区别 1.HTTP请求格式: <request line> <headers> <blank line> [<request-b ...

  7. text-align:-moz-center与text-align:-webkit-center区别与用法

    最近发现各浏览器的不兼容,关于text-align:center这个很多浏览器不兼容. 1.测试发现:text-align:center在IE下是管用的. 2.text-align:-moz-cent ...

  8. [原] GLES在iOS和Android上的不同

    本来GLES提供了与native platform的接口 EGL, 然而iOS没有使用EGL接口, 而是自己搞了一套,叫做EAGL的类似东西, 虽然说大同小异,但是在做跨平台的时候还是很恶心. elg ...

  9. 【Asp.Net-- 杂七杂八】的代码

    Request.Url.PathAndQuery public RedirectResult AddToCart(Cart cart, int productId, string returnUrl) ...

  10. 【Asp.net MVC ---杂七杂八】

    @RenderSection 母模板:_mainLayout.cshtml <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitio ...