Redis性能分析有幾個大的方向。分別是
(1)基準對比
(2)配置優化
(3)數據持久化
(4)鍵值優化
(5)緩存淘汰
(6)Redis集羣
基準對比
在沒有業務實例運行的情況下,在服務器上通過測試Redis 實例的基準性能來對比有實例運行情況下的redis性能。通過以下步驟來判斷Redis實例是否變慢:
1.爲避免業務服務器到 Redis 服務器之間的網絡延遲,可以直接在 Redis 服務器測試實例的延遲
redis-cli -h 127.0.0.1 -p 6379 --intrinsic-latency 60
2.測試時間段內Redis的最小、最大和平均時延
redis-cli -h 127.0.0.1 -p 6379 --latency-history -i 1
3.對比實例運行的redis延遲
1Gb/s的網絡的延遲差不多是200us,如果指令的響應延遲明顯大於200us,可能是請求隊列過多導致。此時total_commands_processed增長會很快
如果是個別指令很慢導致的延遲增加,那麼可以看到total_commands_processed下降或者不變,而Redis性能卻在明顯下降
如果實例的延遲時間是Redis基準性能時間的1.5-2倍以上,可以認爲這個Redis實例性能比較差
配置優化
linux配置優化
vm.overcommit_memory
Redis是內存數據庫,優先使用內存。設置overcommit 爲1是爲了讓 fork 在低內存下也可以執行成功。
0 內存不足時需要檢查
1 允許超量使用內存
2 內存使用不能超過swap+50%,50%是overcommit-ration默認值
禁用thp
Linux支持大內存頁(2MB)分配,默認開啓。開啓時可以降低 fork 子進程的速度,但 fork 操作之後,每個內存頁從原來 4KB 變爲 2MB,會大幅增加內存消耗,同時拖慢寫操作時間,產生大量寫操作慢查詢。因此 Redis 日誌中需要禁用此特性
echo never > /sys/kernel/mm/transparent_hugepage/enabled
Redis配置優化
daemonize no
Redis 默認不是以守護進程的方式運行,可以通過該配置項修改,使用 yes 啓用守護進程
timeout 300
當客戶端閒置多長秒後關閉連接,如果指定爲 0 ,表示關閉該功能
loglevel notice
指定日誌記錄級別,Redis 總共支持四個級別:debug、verbose、notice、warning,默認爲 notice
logfile stdout
日誌記錄方式,默認爲標準輸出,如果配置 Redis 爲守護進程方式運行,而這裏又配置爲日誌記錄方式爲標準輸出,則日誌將會發送給 /dev/null
databases 16
設置數據庫的數量,默認數據庫爲0,可以使用SELECT 命令在連接上指定數據庫id
#RDB 持久化
save 900 1 #在900秒(15分鐘)之後,如果至少有1個key發生變化,則dump內存快照。
save 300 10 #在300秒(5分鐘)之後,如果至少有10個key發生變化,則dump內存快照。
save 60 10000 #在60秒(1分鐘)之後,如果至少有10000個key發生變化,則dump內存快照。
#AOF持久化配置
appendonly yes #開啓AOF持久化,默認爲no
appendfilename "appendonly.aof" #指定更新日誌文件名
appendfsync always #每次有數據修改發生時都會寫入AOF文件
#appendfsync everysec #每秒鐘同步一次,該策略爲AOF的缺省策略
#appendfsync no #從不同步。高效但是數據不會被持久化
rdbcompression yes
指定存儲至本地數據庫時是否壓縮數據,默認爲 yes,Redis 採用 LZF 壓縮。如果爲了節省 CPU 時間,可以關閉該選項,但會導致數據庫文件變的巨大
dbfilename dump.rdb
指定本地數據庫文件名,默認值爲 dump.rdb
requirepass foobared
Redis 連接密碼,如果配置了連接密碼,客戶端在連接 Redis 時需要通過 AUTH <password> 命令提供密碼,默認關閉
maxclients 128
設置同一時間最大客戶端連接數,默認無限制。Redis 可以同時打開的客戶端連接數爲 Redis 進程可以打開的最大文件描述符數,如果設置 maxclients 0,表示不作限制。當客戶端連接數到達限制時,Redis 會關閉新的連接並向客戶端返回 max number of clients reached 錯誤信息
maxmemory <bytes>
指定 Redis 最大內存限制,Redis 在啓動時會把數據加載到內存中。達到最大內存後,Redis 會先嚐試清除已到期或即將到期的 Key,當此方法處理後,仍然到達最大內存設置,將無法再進行寫入操作,但仍然可以進行讀操作。
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
指定在hash或者list超過一定的數量或者某一臨界值時,採用特殊的算法
tcp-backlog
超過最大連接數時,由backlog持有
slowlog-log-slower-than xxxms
執行時間慢於xxx毫秒的命令計入Slow Log
slowlog-max-len xxx
#Slow Log的長度,即最大紀錄多少條Slow Log
訂閱查看更多內容