Redis是一種高級key-value數據庫。它跟memcached相似,不過數據能夠持久化,並且支持的數據類型很豐富。有字符串,鏈表、哈希、集合和有序集合5種。支持在服務器端計算集合的並、交和補集(difference)等,還支持多種排序功能。因此Redis也能夠被當作是一個數據結構服務器。Redis的全部數據都是保存在內存中,而後不按期的經過異步方式保存到磁盤上(這稱爲「半持久化模式」);也能夠把每一次數據變化都寫入到一個append only file(aof)裏面(這稱爲「全持久化模式」)git
[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
[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"
[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 host localhost port 6380 overview
Print general information about a Redis instance;
實時打印出host爲localhost,端口爲6380,redis實例的整體信息github
[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服務中每一個請求的響應時長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
首先判斷客戶端和服務器鏈接是否正常數據庫
# 客戶端和服務器鏈接正常,返回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 系統的狀態報告。api
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 遷移到更強大的機器上去。併發
持久化app
若是由於你的機器或 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的估計值。
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-rdb-tools 能夠直接分析 RDB 文件來生成報告
http://www.jb51.net/article/56448.htm
http://www.yiibai.com/redis/
http://www.jb51.net/article/61793.htm