1. 程式人生 > >redis 引數優化

redis 引數優化

vim /etc/sysctl.conf

vm.overcommit_memory = 1

#最好不要設定為0,Linux的OOM機制在記憶體不足的情況下,會自動選擇性Kill程序點數過高的程序,0會中招。

sysctl vm.overcommit_memory=1

0:表示核心將檢查是否有足夠的可用記憶體供應用程序使用;如果有足夠的可用記憶體,記憶體申請允許;否則,記憶體申請失敗,並把錯誤返回給應用程序。

1:表示核心允許分配所有的實體記憶體,而不管當前的記憶體狀態如何。

2:表示核心允許分配超過所有實體記憶體和交換空間總和的記憶體

vim /etc/redis/redis.conf

##################基礎#################################

daemonize yes //是否以守護程序方式啟動

pidfile /var/run/redis.pid //如果要玩單機多開,需要設定不同path的pid,除非硬體特別緊張,一般不會

port 6379 //埠

tcp-backlog 600 //如果伺服器caps很高,需要把這個引數改大些。

timeout 0 //客戶端連線的超時時間,單位為秒,超時後會關閉連線,0永不超時

tcp-keepalive 0 //檢測掛掉的連線,單位s,0禁止

loglevel notice //日誌記錄等級,4個可選值 debug(除錯) > verbose(精簡) >notice(適量) > warning(警告)

logfile "./redis.log" //日誌檔案路徑

databases 6 //控制資料庫的總數預設客戶端進0號

##################RDB快照#################################

save 900 1 // 900秒(15分鐘)之後,且至少1次變更頻率不要太高,RDB快照代價比較高

save 300 10 //300秒(5分鐘)之後,且至少10次變更頻率不要太高,RDB快照代價比較高

save 60 1000

rdbcompression yes //快照時壓縮

dbfilename dump.rdb //快照名

dir ./ //快照檔案路徑

stop-writes-on-bgsave-error yes //save失敗(快照)是否停止寫操作,如果有監控機制可以no

rdbchecksum yes //生成和載入的時候是否開啟CRC64檢查,開啟後效能消耗大概10%,但更加安全

##################複製(從庫配置)#################################

slaveof  ip地址 6379 //一旦配置(從配置,主不需要),則開啟主從複製

masterauth howbuy //配置主的密碼

slave-serve-stale-data no //從丟失主,或者同步過程中,是否可繼續響應客戶端

repl-disable-tcp-nodelay no //yes 合併tcp包節省頻寬,但產生40ms左右的延時。no 立馬傳送資料,無延遲。從太多,可以考慮yes

slave-priority 100 主掛了,從變主的概率,越小概率越高,但0表示永不做主機

##################安全#################################

requirepass howbuy //設定密碼

#################### 限制####################################

maxclients 128 //限制客戶端的連線數

maxmemory 2gb //最大記憶體最好不要超過空閒記憶體的3/5,超過32GB會自動進入64位世界,指標長度*2,20%的空間會被指標消耗,效能略有影響

maxmemory-policy allkeys-lru //4種策略volatile-lru、allkeys-lru、volatile-random、allkeys-random、noeviction根據 LRU 演算法移除記憶體中所有的 key

maxmemory-samples 5 //五個key然後取最舊的那個,LRU和最小TTL演算法的優化

lua-time-limit 5000 //一個Lua指令碼最長的執行時間為5000毫秒,0或負數表示無限執行時間

################# APPEND ONLY MODE (AOF)###############################

appendonly yes //是否開啟AOF

appendfilename "appendonly.aof" //AOF檔名

appendfsync everysec //每秒寫入效能   no(作業系統決定) >everysec(每秒寫一次) > always(每次立馬寫入)

no-appendfsync-on-rewrite yes //寫AOF的時候放棄同步主程序的變化,可能會丟日誌,但是在高併發的時候不會出現一卡一卡的現象

auto-aof-rewrite-percentage 100 //AOF檔案體積擴大100%的時候重寫該日誌

auto-aof-rewrite-min-size 64mb //除了百分比,再加體積限制

aof-load-truncated yes //redis在啟動時可以載入被截斷的AOF檔案

aof-rewrite-incremental-fsync yes //當修改AOF檔案時,該設定為yes,則每生成32MB的資料,就進行同步

################## 慢查日誌###################################

slowlog-log-slower-than 1000000 //記錄超過1秒的操作

slowlog-max-len 50 //記錄50個

################ 虛擬記憶體 ###############################

#vm-enabled no //不用虛擬記憶體,太窮的話就沒必要用redis

################高階配置###############################

hash-max-ziplist-entries 512 //配置最大元素數,當超過該配置資料時,redis採用特殊hash演算法

hash-max-ziplist-value 64 //配置最大元素值,當超過配置值時,採用特殊hash演算法

list-max-ziplist-entries 512

list-max-ziplist-value 64

set-max-intset-entries 512

set-max-intset-value 64

zset-max-ziplist-entries 128

zset-max-ziplist-value 64

hll-sparse-max-bytes 5000 //配置超重對數基數,CPU比較牛的情況下可以上10000

activerehashing yes //雜湊重新整理,如果你不太在意延遲而希望儘快釋放記憶體的話就設定

client-output-buffer-limit normal 0 0 0  //對客戶端輸出緩衝進行限制可以強迫那些就不從伺服器讀取資料的客戶端斷開連線。對於normalclient,第一個0表示取消hardlimit,第二個0和第三個0表示取消soft limit,normalclient預設取消限制,因為如果沒有尋問,他們是不會接收資料的

client-output-buffer-limit slave 256mb 64mb 60  //對於slaveclient和MONITER client,如果client-output-buffer一旦超過256mb,又或者超過64mb持續60秒,那麼伺服器就會立即斷開客戶端連線。

client-output-buffer-limit pubsub 32mb 8mb 60 //對於pubsub client,如果client-output-buffer一旦超過32mb,又或者超過8mb持續60秒,那麼伺服器就會立即斷開客戶端連線。

hz 20 #redis內部排程(進行關閉timeout的客戶端,刪除過期key等等)頻率

################################ LATENCY MONITOR##############################

latency-monitor-threshold 0 //用LATENCY列印redis例項在跑命令時的耗時圖表,監視訊率,0為不監視

#重要引數

daemonize yes #守護程序模式

save 60 1000 #當時間間隔超過60秒,或儲存超過1000條記錄時,進行持久化。

maxmemory 256mb #分配256MB記憶體

#注意:如果是主庫掛了,先把從庫的dump檔案拷貝到主庫/etc/redis目錄下在,再啟動主庫。

#scp /etc/redis/dump.rdb [email protected]地址:/etc/redis/dump.rdb