Redis介绍
今天给自己的博客使用了Redis、先简单说下什么是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.6]# redis-benchmark -h localhost -p 6379 -c 100 -n 100000 ====== PING ====== 10001 requests completed in 0.41 seconds 50 parallel clients 3 bytes payload keep alive: 1 0.01% <= 0 milliseconds 23.09% <= 1 milliseconds 85.82% <= 2 milliseconds 95.60% <= 3 milliseconds 97.20% <= 4 milliseconds 97.96% <= 5 milliseconds 98.83% <= 6 milliseconds 99.41% <= 7 milliseconds 99.70% <= 8 milliseconds 99.99% <= 9 milliseconds 100.00% <= 12 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.6]# redis-cli -h localhost -p 6380 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.6]# redis-cli -h localhost -p 6380 info redis_version:2.0.4 redis_git_sha1:00000000 redis_git_dirty:0 arch_bits:32 multiplexing_api:epoll process_id:21990 uptime_in_seconds:490580 uptime_in_days:5 connected_clients:103 connected_slaves:0 blocked_clients:0 used_memory:4453240 used_memory_human:4.25M changes_since_last_save:200 bgsave_in_progress:0 last_save_time:1290394640 bgrewriteaof_in_progress:0 total_connections_received:809 total_commands_processed:44094018 expired_keys:0 hash_max_zipmap_entries:64 hash_max_zipmap_value:512 pubsub_channels:0 pubsub_patterns:0 vm_enabled:0 role:slave master_host:localhost master_port:6379 master_link_status:up master_last_io_seconds_ago:18 db0:keys=1319,expires=0
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.6]# redis-stat port 6380 overview ------- data ------ ------------ load ----------------------------- - childs - keys used-mem clients requests connections 1319 5.37M 103 44108021 (+44108021) 810 1319 5.38M 103 44108124 (+103) 810 1319 5.38M 103 44108225 (+101) 810 1319 5.39M 103 44108326 (+101) 810 1319 5.40M 103 44108427 (+101) 810 1319 5.41M 103 44108528 (+101) 810
redis-stat host localhost port 6380 overview
Measure Redis server latency;
输出host为localhost,端口为6380,redis服务中每个请求的响应时长
[root@Architect redis-1.2.6]# redis-stat port 6380 latency 1: 0.16 ms 2: 0.11 ms 3: 0.15 ms 4: 0.11 ms 5: 0.18 ms 6: 0.14 ms
Redis监控
首先判断客户端和服务器连接是否正常
# 客户端和服务器连接正常,返回PONG redis> PING PONG # 客户端和服务器连接不正常(网络不正常或服务器未能正常运行),返回连接异常 redis 127.0.0.1:6379> PING Could not connect to Redis at 127.0.0.1:6379: Connection refused
Redis 监控最直接的方法就是使用系统提供的 info 命令,只需要执行下面一条命令,就能获得 Redis 系统的状态报告。
redis-cli info
结果会返回 Server、Clients、Memory、Persistence、Stats、Replication、CPU、Keyspace 8个部分。从info大返回结果中提取相关信息,就可以达到有效监控的目的。
先解释下各个参数含义
复制代码 # Server redis_version:2.8.8 # Redis 的版本 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:bf5d1747be5380f redis_mode:standalone os:Linux 2.6.32-220.7.1.el6.x86_64 x86_64 arch_bits:64 multiplexing_api:epoll gcc_version:4.4.7 #gcc版本 process_id:49324 # 当前 Redis 服务器进程id run_id:bbd7b17efcf108fdde285d8987e50392f6a38f48 tcp_port:6379 uptime_in_seconds:1739082 # 运行时间(秒) uptime_in_days:20 # 运行时间(天) hz:10 lru_clock:1734729 config_file:/home/s/apps/RedisMulti_video_so/conf/zzz.conf # Clients connected_clients:1 #连接的客户端数量 client_longest_output_list:0 client_biggest_input_buf:0 blocked_clients:0 # Memory used_memory:821848 #Redis分配的内存总量 used_memory_human:802.59K used_memory_rss:85532672 #Redis分配的内存总量(包括内存碎片) used_memory_peak:178987632 used_memory_peak_human:170.70M #Redis所用内存的高峰值 used_memory_lua:33792 mem_fragmentation_ratio:104.07 #内存碎片比率 mem_allocator:tcmalloc-2.0 # Persistence loading:0 rdb_changes_since_last_save:0 #上次保存数据库之后,执行命令的次数 rdb_bgsave_in_progress:0 #后台进行中的 save 操作的数量 rdb_last_save_time:1410848505 #最后一次成功保存的时间点,以 UNIX 时间戳格式显示 rdb_last_bgsave_status:ok rdb_last_bgsave_time_sec:0 rdb_current_bgsave_time_sec:-1 aof_enabled:0 #redis是否开启了aof aof_rewrite_in_progress:0 aof_rewrite_scheduled:0 aof_last_rewrite_time_sec:-1 aof_current_rewrite_time_sec:-1 aof_last_bgrewrite_status:ok aof_last_write_status:ok # Stats total_connections_received:5705 #运行以来连接过的客户端的总数量 total_commands_processed:204013 # 运行以来执行过的命令的总数量 instantaneous_ops_per_sec:0 rejected_connections:0 sync_full:0 sync_partial_ok:0 sync_partial_err:0 expired_keys:34401 #运行以来过期的 key 的数量 evicted_keys:0 #运行以来删除过的key的数量 keyspace_hits:2129 #命中key 的次数 keyspace_misses:3148 #没命中key 的次数 pubsub_channels:0 #当前使用中的频道数量 pubsub_patterns:0 #当前使用中的模式数量 latest_fork_usec:4391 # Replication role:master #当前实例的角色master还是slave connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 # 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=3,expires=0,avg_ttl=0 #各个数据库的 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 5000 CONFIG SET slowlog-max-len 25
slowlog-log-slower-than 是用来设置微秒数的, 因此上面的设置将记录执行时间超过5秒的查询. 要获取记录的日志,你可以使用 SLOWLOG GET X 命令, 这里 X 是你想要获取的记录条数:
SLOWLOG GET 10
Redis中统计各种数据大小的方法
Redis 内存比较大的话,我们就不太容易查出是哪些(种)键占用的空间。
有一些工具能够提供必要的帮助,比如 redis-rdb-tools 可以直接分析 RDB 文件来生成报告
学派吧-小编有些还没完全用到。正在努力配置 学习中。成功后 把案例发表出来。欢迎加我们站长交流群