溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

redis性能調優

發布時間:2020-07-06 23:32:16 來源:網絡 閱讀:4009 作者:goldfishe 欄目:關系型數據庫

針對Redis的性能優化,主要從下面幾個層面入手:

  • 最初的也是最重要的,確保沒有讓Redis執行耗時長的命令

  • 使用pipelining將連續執行的命令組合執行,

  • 使用pipelining時,只需要從客戶端一次向Redis發送多條命令(以\r\n)分隔,Redis就會依次執行這些命令,并且把每個命令的返回按順序組裝在一起一次返回,比如:

  • $ (printf "PING\r\nPING\r\nPING\r\n"; sleep 1) | nc localhost 6379
    +PONG
    +PONG
    +PONG
  • 操作系統的Transparent huge pages(大內存頁)功能必須關閉,否則可能導致redis延遲和內存使用問題:

    echo never > /sys/kernel/mm/transparent_hugepage/enabled
  • echo never > /sys/kernel/mm/transparent_hugepage/defrag
  • 如果在虛擬機中運行Redis,可能天然就有虛擬機環境帶來的固有延遲??梢酝ㄟ^./redis-cli --intrinsic-latency 100命令查看固有延遲。同時如果對Redis的性能有較高要求的話,應盡可能在物理機上直接部署Redis。

  • 檢查數據持久化策略

  • 考慮引入讀寫分離機制

  • 用scan代替keys,因為keys會阻塞redis的單線程



集群分片

為何要做集群分片:

  • Redis中存儲的數據量大,一臺主機的物理內存已經無法容納

  • Redis的寫請求并發量大,一個Redis實例以無法承載

當上述兩個問題出現時,就必須要對Redis進行分片了。
Redis的分片方案有很多種,例如很多Redis的客戶端都自行實現了分片功能,也有向Twemproxy這樣的以代理方式實現的Redis分片方案。然而首選的方案還應該是Redis官方在3.0版本中推出的Redis Cluster分片方案。

本文不會對Redis Cluster的具體安裝和部署細節進行介紹,重點介紹Redis Cluster帶來的好處與弊端。

Redis Cluster的能力
  • 能夠自動將數據分散在多個節點上

  • 當訪問的key不在當前分片上時,能夠自動將請求轉發至正確的分片

  • 當集群中部分節點失效時仍能提供服務

其中第三點是基于主從復制來實現的,Redis Cluster的每個數據分片都采用了主從復制的結構,原理和前文所述的主從復制完全一致,唯一的區別是省去了Redis Sentinel這一額外的組件,由Redis Cluster負責進行一個分片內部的節點監控和自動failover。

Redis Cluster分片原理

Redis Cluster中共有16384個hash slot,Redis會計算每個key的CRC16,將結果與16384取模,來決定該key存儲在哪一個hash slot中,同時需要指定Redis Cluster中每個數據分片負責的Slot數。Slot的分配在任何時間點都可以進行重新分配。

客戶端在對key進行讀寫操作時,可以連接Cluster中的任意一個分片,如果操作的key不在此分片負責的Slot范圍內,Redis Cluster會自動將請求重定向到正確的分片上。


數據淘汰機制

Redis提供了5種數據淘汰策略:

  • volatile-lru:使用LRU算法進行數據淘汰(淘汰上次使用時間最早的,且使用次數最少的key),只淘汰設定了有效期的key

  • allkeys-lru:使用LRU算法進行數據淘汰,所有的key都可以被淘汰

  • volatile-random:隨機淘汰數據,只淘汰設定了有效期的key

  • allkeys-random:隨機淘汰數據,所有的key都可以被淘汰

  • volatile-ttl:淘汰剩余有效期最短的key

最好為Redis指定一種有效的數據淘汰策略以配合maxmemory設置,避免在內存使用滿后發生寫入失敗的情況。

一般來說,推薦使用的策略是volatile-lru,并辨識Redis中保存的數據的重要性。對于那些重要的,絕對不能丟棄的數據(如配置類數據等),應不設置有效期,這樣Redis就永遠不會淘汰這些數據。對于那些相對不是那么重要的,并且能夠熱加載的數據(比如緩存最近登錄的用戶信息,當在Redis中找不到時,程序會去DB中讀?。?,可以設置上有效期,這樣在內存不夠時Redis就會淘汰這部分數據。

配置方法:

maxmemory-policy volatile-lru   #默認是noeviction,即不進行數據淘汰

本文參考資料https://www.cnblogs.com/276815076/p/7245333.html


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女