Codis3之參數調優

1. 參數調優

1.1 關閉AOF

只做純內存的緩存,其實只需要RDB就好了,不需要AOF,因爲AOF性能比RDB差些,消耗的磁盤空間也更大,我們只需要RDB做冷備。相對於AOF持久化機制來說,直接基於RDB數據文件來重啓和恢復redis進程,更加快速。使用RDB來進行快速的數據恢復,達到緩存預熱的目的。

1.2 修改RDB配置

redis.conf文件,去配置持久化

save 900 1
save 300 10
save 60 10000

每隔60s,如果有超過10000個key發生了變更,那麼就生成一個新的dump.rdb文件
具體根據生產環境情況進行調整

1.3 overcommit_memory

0: 檢查有沒有足夠內存,沒有的話申請內存失敗
1: 允許使用內存直到用完爲止
2: 內存地址空間不能超過swap + 50%驗證

如果是0的話,可能導致類似fork等操作執行失敗,申請不到足夠的內存空間

cat /proc/sys/vm/overcommit_memory
echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
sysctl vm.overcommit_memory=1

1.4 swapiness

cat /proc/version,查看linux內核版本

如果linux內核版本<3.5,那麼swapiness設置爲0,這樣系統寧願swap也不會oom killer(殺掉進程)
如果linux內核版本>=3.5,那麼swapiness設置爲1,這樣系統寧願swap也不會oom killer
保證redis不會被殺掉

echo 0 > /proc/sys/vm/swappiness
echo vm.swapiness=0 >> /etc/sysctl.conf

1.5 最大打開文件句柄

ulimit -n 10032 10032

百度一下,不同的操作系統,版本,設置的方式都不太一樣

1.6 緩存清理設置

redis.conf

maxmemory,設置redis用來存放數據的最大的內存大小,一旦超出這個內存大小之後,就會立即使用LRU算法清理掉部分數據

如果用LRU,那麼就是將最近最少使用的數據從緩存中清除出去

對於64 bit的機器,如果maxmemory設置爲0,那麼就默認不限制內存的使用,直到耗盡機器中所有的內存爲止; 但是對於32 bit的機器,有一個隱式的閒置就是3GB

maxmemory-policy,可以設置內存達到最大閒置後,採取什麼策略來處理

(1)noeviction: 如果內存使用達到了maxmemory,client還要繼續寫入數據,那麼就直接報錯給客戶端

(2)allkeys-lru: 就是我們常說的LRU算法,移除掉最近最少使用的那些keys對應的數據

(3)volatile-lru: 也是採取LRU算法,但是僅僅針對那些設置了指定存活時間(TTL)的key纔會清理掉

(4)allkeys-random: 隨機選擇一些key來刪除掉

(5)volatile-random: 隨機選擇一些設置了TTL的key來刪除掉

(6)volatile-ttl: 移除掉部分keys,選擇那些TTL時間比較短的keys

1.7 redis的LRU近似算法

redis採取的是LRU近似算法,也就是對keys進行採樣,然後在採樣結果中進行數據清理

redis 3.0開始,在LRU近似算法中引入了pool機制,表現可以跟真正的LRU算法相當,但是還是有所差距的,不過這樣可以減少內存的消耗

redis LRU算法,是採樣之後再做LRU清理的,跟真正的、傳統、全量的LRU算法是不太一樣的

maxmemory-samples,比如5,可以設置採樣的大小,如果設置爲10,那麼效果會更好,不過也會耗費更多的CPU資源
發佈了87 篇原創文章 · 獲贊 70 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章