一、慢查詢的做用:經過慢查詢分析,找到有問題的命令進行優化。git
二、慢查詢的redis的配置參數:redis
slowlog-log-slower-than 慢查詢預設閾值(單位是微秒1秒=1000000微秒) slowlog-max-len 慢查詢最多存多少條
修改慢查詢有兩種方法:shell
1、直接在redis.conf上修改。 2、在redis的shell裏面修改: config set slowlog-log-slower-than 20000 config set slowlog-man-len 1000 config rewrite #持久化寫入到本地文件
慢查詢日誌是會存儲在內存中, 沒有文件存儲慢查詢日誌內容. 因此在獲取慢查詢日誌時候,會響應很是快. 對性能影響很小.數據庫
獲取慢查詢日誌可使用 slowlog get 命令, 將會全部的慢查詢記錄. 獲取指定數量的慢查詢使用:api
slowlog get n數組
慢查詢日誌四個屬性:緩存
一、第一個字段是每一個慢查詢惟一標識。
二、處理完命令後的時間戳
三、執行更名了所須要的時間,單位微妙
四、命令的參數列表,是個數組類型
每一個慢查詢實體的ID都是惟一的,並且不會被從新設置,只會在redis重啓後纔會重置它.
查看當前慢查詢日誌長度:服務器
slowlog len網絡
清空慢查詢日誌內容:架構
slowlog reset
一、redis-cli
一、-r 表明將命令重複執行屢次 ./redis-cli -r 3 ping PONG PONG PONG ping命令可用於檢測redis實例是否存活,若是存活則顯示PONG。 二、-i 每隔幾秒(若是想用ms,如10ms則寫0.01)執行一次命令,必須與-r一塊兒使用。 ./redis-cli -r 3 -i 1 ping PONG PONG PONG
./redis-cli -r 10 -i 1 info|grep used_memory_human used_memory_human:2.95G ..................................... used_memory_human:2.95G 每隔1秒輸出內存的使用量,一共輸出10次。 ./redis-cli -h ip -p port info server|grep process_id process_id:999 #獲取redis的進程號999 三、-x 表明從標準輸入讀取數據做爲該命令的最後一個參數。 ./echo "world" |redis-cli -x set hello Ok 四、-c 鏈接集羣結點時使用,此選項可防止moved和ask異常。 五、-a 如配置了密碼,可用a選項。 六、--scan和--pattern 用於掃描指定模式的鍵,至關於scan命令。 七、--slave 噹噹前客戶端模擬成當前redis節點的從節點,可用來獲取當前redis節點的更新操做。合理利用可用於記錄當前鏈接redis節點的一些更新操做,這些更新多是實開發業務時須要的數據。 八、--rdb 會請求redis實例生成併發送RDB持久化文件,保存在本地。可作按期備份。 九、--pipe 將命令封裝成redis通訊協議定義的數據格式,批量發送給redis執行。 十、--bigkeys 統計bigkey的分佈,使用scan命令對redis的鍵進行採樣,從中找到內存佔用比較大的鍵,這些鍵多是系統的瓶頸。 十一、--eval 用於執行lua腳本 十二、--latency 有三個選項,--latency、--latency-history、--latency-dist。它們可檢測網絡延遲,展示的形式不一樣。 1三、--stat 可實時獲取redis的重要統計信息。info命令雖然比較全,但這裏可看到一些增長的數據,如requests(每秒請求數) 1四、--raw 和 --no-raw --no-raw 要求返回原始格式。--raw 顯示格式化的效果。
二、redis-server
檢測當前系統是否提供1G內存給redis。
./redis-server --test-memory 1024
三、redis-benchmark
能夠爲redis作基準測試:
一、-c 客戶端的併發數量(默認50) 二、-n 客戶端的請求總量(默認是100000) ./redis-benchmark -c 100 -n 100000 #表明100個客戶端同時請求redis,一共執行100000次,redis-benchmark會對各個數據類型結構命令進行測試 ====== PING_INLINE ====== 100000 requests completed in 0.97 seconds 100 parallel clients 3 bytes payload keep alive: 1 99.37% <= 1 milliseconds 99.84% <= 2 milliseconds 99.94% <= 3 milliseconds 99.97% <= 4 milliseconds 100.00% <= 4 milliseconds 102880.66 requests per second 三、-q 僅僅顯示redis-benchmark的requests per second信息: PING_INLINE: 104602.52 requests per second PING_BULK: 103842.16 requests per second SET: 101010.10 requests per second GET: 104712.05 requests per second INCR: 105820.11 requests per second LPUSH: 106157.12 requests per second RPUSH: 102880.66 requests per second LPOP: 102459.02 requests per second RPOP: 103842.16 requests per second SADD: 103199.18 requests per second HSET: 105485.23 requests per second SPOP: 98716.68 requests per second 四、-r 在一個空的redis上執行redis-benchmark會發現有三個鍵,想要插入更多的鍵,執行-r選項,能夠向redis插入更多的鍵。 五、 -P 表明每一個請求pipeline的數據量(默認爲1)。 六、 -k 表明客戶端是否使用keeplive,1爲使用,0爲不使用,默認爲1 七、-t 能夠對指定命令進行基準測試。 八、--csv 將結果按照csv格式輸出,便於後續處理,入導到Excel等。
info server 服務端信息 redis_version #Redis服務器版本 redis_git_sha1 #Git SHA1 redis_git_dirty #Git髒標誌 os #Redis服務器的宿主操做系統 arch_bits #架構(32或64位) multiplex_api #Redis所使用的事件處理機制 gcc_version #編譯Redis時所使用的GCC版本 process_id #服務器進程的PID run_id #Redis的服務器的隨機標識符(用於前哨和集羣) tcp_port #TCP / IP監聽端口 uptime_in_seconds #自動Redis服務器啓動以來,通過的秒數 uptime_in_days #自動Redis服務器啓動以來,通過的天數 lru_clock #以分鐘爲單位進行自增的時鐘,用於LRU管理 info clients 客戶端信息 connected_clients #已鏈接客戶端的數量(不包括經過從屬性服務器鏈接的客戶端) client_longest_output_list #當前鏈接的客戶端當中,最長的輸出列表 client_longest_input_buf #當前鏈接的客戶端當中,最大輸入緩存 blocked_clients #正在等待阻塞命令(BLPOP,BRPOP,BRPOPLPUSH)的客戶端的數量
info memory 內存信息 used_memory #由Redis分配器分配的內存總量,以字節(byte)爲單位 used_memory_human #以人類可讀的格式返回Redis分配的內存總量 used_memory_rss #從操做系統的角度,返回Redis已分配的內存總量(俗稱常駐集大小)。這個值和 top, ps等命令的輸出一致。 used_memory_peak #Redis的內存消耗峯值(以字節爲單位) used_memory_peak_human #以人類可讀的格式返回Redis的內存消耗峯值 used_memory_lua #Lua引擎所使用的內存大小(以字節爲單位) mem_fragmentation_ratio # used_memory_rss和 used_memory之間的比率 mem_allocator #在編譯時指定的,Redis所使用的內存分配器。能夠是libc,jemalloc或者tcmalloc。 info persistence RDB和AOF的持久化相關信息 loading:0 #服務器是否正在載入持久化文件 rdb_changes_since_last_save:28900855 #離最近一次成功生成rdb文件,寫入命令的個數,即有多少個寫入命令沒有持久化 rdb_bgsave_in_progress:0 #服務器是否正在建立rdb文件 rdb_last_save_time:1482358115 #離最近一次成功建立rdb文件的時間戳。當前時間戳 - rdb_last_save_time=多少秒未成功生成rdb文件 rdb_last_bgsave_status:ok #最近一次rdb持久化是否成功 rdb_last_bgsave_time_sec:2 #最近一次成功生成rdb文件耗時秒數 rdb_current_bgsave_time_sec:-1 #若是服務器正在建立rdb文件,那麼這個域記錄的就是當前的建立操做已經耗費的秒數 aof_enabled:1 #是否開啓了aof aof_rewrite_in_progress:0 #標識aof的rewrite操做是否在進行中 aof_rewrite_scheduled:0 info rewrite 任務計劃,當客戶端發送bgrewriteaof指令,若是當前rewrite子進程正在執行,那麼將客戶端請求的bgrewriteaof變爲計劃任務,待aof子進程結束後執行rewrite aof_last_rewrite_time_sec:-1 #最近一次aof rewrite耗費的時長 aof_current_rewrite_time_sec:-1 #若是rewrite操做正在進行,則記錄所使用的時間,單位秒 aof_last_bgrewrite_status:ok #上次bgrewriteaof操做的狀態 aof_last_write_status:ok #上次aof寫入狀態 aof_current_size:4201740 #aof當前尺寸 aof_base_size:4201687 #服務器啓動時或者aof重寫最近一次執行以後aof文件的大小 aof_pending_rewrite:0 #是否有aof重寫操做在等待rdb文件建立完畢以後執行? aof_buffer_length:0 #aof buffer的大小 aof_rewrite_buffer_length:0 #aof rewrite buffer的大小 aof_pending_bio_fsync:0 #後臺I/O隊列裏面,等待執行的fsync調用數量 aof_delayed_fsync:0 #被延遲的fsync調用數量 info stats 通常統計信息 total_connections_received:209561105 #新建立鏈接個數,若是新建立鏈接過多,過分地建立和銷燬鏈接對性能有影響,說明短鏈接嚴重或鏈接池使用有問題,需調研代碼的鏈接設置 total_commands_processed:2220123478 #redis處理的命令數 instantaneous_ops_per_sec:279 #redis當前的qps,redis內部較實時的每秒執行的命令數 total_net_input_bytes:118515678789 #redis網絡入口流量字節數 total_net_output_bytes:236361651271 #redis網絡出口流量字節數 instantaneous_input_kbps:13.56 #redis網絡入口kps instantaneous_output_kbps:31.33 #redis網絡出口kps rejected_connections:0 #拒絕的鏈接個數,redis鏈接個數達到maxclients限制,拒絕新鏈接的個數 sync_full:1 #主從徹底同步成功次數 sync_partial_ok:0 #主從部分同步成功次數 sync_partial_err:0 #主從部分同步失敗次數 expired_keys:15598177 #運行以來過時的key的數量 evicted_keys:0 #運行以來剔除(超過了maxmemory後)的key的數量 keyspace_hits:1122202228 #命中次數 keyspace_misses:577781396 #沒命中次數 pubsub_channels:0 #當前使用中的頻道數量 pubsub_patterns:0 #當前使用的模式的數量 latest_fork_usec:15679 #最近一次fork操做阻塞redis進程的耗時數,單位微秒 migrate_cached_sockets:0 # info replication 主從信息,master上顯示的信息 role:master #實例的角色,是master or slave connected_slaves:1 #鏈接的slave實例個數 slave0:ip=192.168.64.104,port=9021,state=online,offset=6713173004,lag=0 #lag從庫多少秒未向主庫發送REPLCONF命令 master_repl_offset:6713173145 #主從同步偏移量,此值若是和上面的offset相同說明主從一致沒延遲 repl_backlog_active:1 #複製積壓緩衝區是否開啓 repl_backlog_size:134217728 #複製積壓緩衝大小 repl_backlog_first_byte_offset:6578955418 #複製緩衝區裏偏移量的大小 repl_backlog_histlen:134217728 #此值等於 master_repl_offset - repl_backlog_first_byte_offset,該值不會超過repl_backlog_size的大小 info replication 主從信息,slave上顯示的信息 role:slave #實例的角色,是master or slave master_host:192.168.64.102 #此節點對應的master的ip master_port:9021 #此節點對應的master的port master_link_status:up #slave端可查看它與master之間同步狀態,當複製斷開後表示down master_last_io_seconds_ago:0 #主庫多少秒未發送數據到從庫? master_sync_in_progress:0 #從服務器是否在與主服務器進行同步 slave_repl_offset:6713173818 #slave複製偏移量 slave_priority:100 #slave優先級 slave_read_only:1 #從庫是否設置只讀 connected_slaves:0 #鏈接的slave實例個數 master_repl_offset:0 repl_backlog_active:0 #複製積壓緩衝區是否開啓 repl_backlog_size:134217728 #複製積壓緩衝大小 repl_backlog_first_byte_offset:0 #複製緩衝區裏偏移量的大小 repl_backlog_histlen:0 #此值等於 master_repl_offset - repl_backlog_first_byte_offset,該值不會超過repl_backlog_size的大小 info CPU CPU計算量統計信息 used_cpu_sys:96894.66 #將全部redis主進程在覈心態所佔用的CPU時求和累計起來 used_cpu_user:87397.39 #將全部redis主進程在用戶態所佔用的CPU時求和累計起來 used_cpu_sys_children:6.37 #將後臺進程在覈心態所佔用的CPU時求和累計起來 used_cpu_user_children:52.83 #將後臺進程在用戶態所佔用的CPU時求和累計起來 info commandstats 各類不一樣類型的命令的執行統計信息 cmdstat_get:calls=1664657469,usec=8266063320,usec_per_call=4.97 #call每一個命令執行次數,usec總共消耗的CPU時長(單位微秒),平均每次消耗的CPU時長(單位微秒) info cluster 集羣相關信息 cluster_enabled:1 #實例是否啓用集羣模式 info keyspace 數據庫相關的統計信息 db0:keys=194690,expires=191702,avg_ttl=3607772262 #db0的key的數量,以及帶有生存期的key的數,平均存活時間