Redis配置優化和使用

一、redis編碼使用優化

1、儘量使用短的key

當然在精簡的同時,不要爲了key的“見名知意”。對於value有些也可精簡,比如性別使用0、1。

2、避免使用keys *

  keys *, 這個命令是阻塞的,即操作執行期間,其它任何命令在你的實例中都無法執行。當redis中key數據量小時到無所謂,數據量大就很糟糕了。所以我們應該避免去使用這個命令。可以去使用SCAN,來代替。

3、在存到Redis之前先把你的數據壓縮下

redis爲每種數據類型都提供了兩種內部編碼方式,在不同的情況下redis會自動調整合適的編碼方式。

4、設置key有效期

我們應該儘可能的利用key有效期。比如一些臨時數據(短信校驗碼),過了有效期Redis就會自動爲你清除!

5、儘可能地使用hashes哈希存儲

6、想要一次添加多條數據的時候可以使用管道

二、Redis 配置優化

1、選擇回收策略(maxmemory-policy)

當Redis的實例空間被填滿了之後,將會嘗試回收一部分key。根據你的使用方式,強烈建議使用 volatile-lru(默認) 策略——前提是你對key已經設置了超時。但如果你運行的是一些類似於 cache 的東西,並且沒有對 key 設置超時機制,可以考慮使用 allkeys-lru 回收機制,具體講解查看 。maxmemory-samples 3 是說每次進行淘汰的時候 會隨機抽取3個key 從裏面淘汰最不經常使用的(默認選項)。

maxmemory-policy 六種方式 :
volatile-lru:只對設置了過期時間的key進行LRU(默認值)
allkeys-lru : 是從所有key裏 刪除 不經常使用的key
volatile-random:隨機刪除即將過期key
allkeys-random:隨機刪除
volatile-ttl : 刪除即將過期的
noeviction : 永不過期,返回錯誤

2、當業務場景不需要數據持久化時,關閉所有的持久化方式可以獲得最佳的性能

  數據持久化時需要在持久化和延遲/性能之間做相應的權衡.

3、限制redis的內存大小(64位系統不限制內存,32位系統默認最多使用3GB內存) 

 數據量不可預估,並且內存也有限的話,儘量限制下redis使用的內存大小,這樣可以避免redis使用swap分區或者出現OOM錯誤。(使用swap分區,性能較低,如果限制了內存,當到達指定內存之後就不能添加數據了,否則會報OOM錯誤。可以設置maxmemory-policy,內存不足時刪除數據)

4、配置SLOWLOG [get/reset/len]

5、修改linux內核內存分配策略

錯誤日誌:WARNING overcommit_memory is set to 0! Background save may fail under low memory condition.
To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or
run the command 'sysctl vm.overcommit_memory=1

 redis在備份數據的時候,會fork出一個子進程,理論上child進程所佔用的內存和parent是一樣的,比如parent佔用的內存爲8G,這個時候也要同樣分配8G的內存給child,如果內存無法負擔,往往會造成redis服務器的down機或者IO負載過高,效率下降。所以內存分配策略應該設置爲 1(表示內核允許分配所有的物理內存,而不管當前的內存狀態如何)。
內存分配策略有三種
可選值:0、1、2。
0, 表示內核將檢查是否有足夠的可用內存供應用進程使用;如果有足夠的可用內存,內存申請允許;否則,內存申請失敗,並把錯誤返回給應用進程。
1, 不管需要多少內存,都允許申請。
2, 只允許分配物理內存和交換內存的大小(交換內存一般是物理內存的一半)。

3、關閉Transparent Huge Pages(THP)

THP會造成內存鎖影響redis性能,建議關閉

轉載:https://www.cnblogs.com/moonandstar08/p/7282108.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章