針對Redis的性能優(yōu)化,主要從下面幾個層面入手:
創(chuàng)新互聯(lián)公司服務項目包括都安網站建設、都安網站制作、都安網頁制作以及都安網絡營銷策劃等。多年來,我們專注于互聯(lián)網行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網行業(yè)的解決方案,都安網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到都安省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!最初的也是最重要的,確保沒有讓Redis執(zhí)行耗時長的命令
使用pipelining將連續(xù)執(zhí)行的命令組合執(zhí)行,
使用pipelining時,只需要從客戶端一次向Redis發(fā)送多條命令(以\r\n)分隔,Redis就會依次執(zhí)行這些命令,并且把每個命令的返回按順序組裝在一起一次返回,比如:
操作系統(tǒng)的Transparent huge pages(大內存頁)功能必須關閉,否則可能導致redis延遲和內存使用問題:
echo never > /sys/kernel/mm/transparent_hugepage/enabled如果在虛擬機中運行Redis,可能天然就有虛擬機環(huán)境帶來的固有延遲??梢酝ㄟ^./redis-cli --intrinsic-latency 100命令查看固有延遲。同時如果對Redis的性能有較高要求的話,應盡可能在物理機上直接部署Redis。
檢查數(shù)據(jù)持久化策略
考慮引入讀寫分離機制
用scan代替keys,因為keys會阻塞redis的單線程
為何要做集群分片:
Redis中存儲的數(shù)據(jù)量大,一臺主機的物理內存已經無法容納
Redis的寫請求并發(fā)量大,一個Redis實例以無法承載
當上述兩個問題出現(xiàn)時,就必須要對Redis進行分片了。
Redis的分片方案有很多種,例如很多Redis的客戶端都自行實現(xiàn)了分片功能,也有向Twemproxy這樣的以代理方式實現(xiàn)的Redis分片方案。然而選的方案還應該是Redis官方在3.0版本中推出的Redis Cluster分片方案。
本文不會對Redis Cluster的具體安裝和部署細節(jié)進行介紹,重點介紹Redis Cluster帶來的好處與弊端。
能夠自動將數(shù)據(jù)分散在多個節(jié)點上
當訪問的key不在當前分片上時,能夠自動將請求轉發(fā)至正確的分片
當集群中部分節(jié)點失效時仍能提供服務
其中第三點是基于主從復制來實現(xiàn)的,Redis Cluster的每個數(shù)據(jù)分片都采用了主從復制的結構,原理和前文所述的主從復制完全一致,唯一的區(qū)別是省去了Redis Sentinel這一額外的組件,由Redis Cluster負責進行一個分片內部的節(jié)點監(jiān)控和自動failover。
Redis Cluster中共有16384個hash slot,Redis會計算每個key的CRC16,將結果與16384取模,來決定該key存儲在哪一個hash slot中,同時需要指定Redis Cluster中每個數(shù)據(jù)分片負責的Slot數(shù)。Slot的分配在任何時間點都可以進行重新分配。
客戶端在對key進行讀寫操作時,可以連接Cluster中的任意一個分片,如果操作的key不在此分片負責的Slot范圍內,Redis Cluster會自動將請求重定向到正確的分片上。
Redis提供了5種數(shù)據(jù)淘汰策略:
volatile-lru:使用LRU算法進行數(shù)據(jù)淘汰(淘汰上次使用時間最早的,且使用次數(shù)最少的key),只淘汰設定了有效期的key
allkeys-lru:使用LRU算法進行數(shù)據(jù)淘汰,所有的key都可以被淘汰
volatile-random:隨機淘汰數(shù)據(jù),只淘汰設定了有效期的key
allkeys-random:隨機淘汰數(shù)據(jù),所有的key都可以被淘汰
volatile-ttl:淘汰剩余有效期最短的key
最好為Redis指定一種有效的數(shù)據(jù)淘汰策略以配合maxmemory設置,避免在內存使用滿后發(fā)生寫入失敗的情況。
一般來說,推薦使用的策略是volatile-lru,并辨識Redis中保存的數(shù)據(jù)的重要性。對于那些重要的,絕對不能丟棄的數(shù)據(jù)(如配置類數(shù)據(jù)等),應不設置有效期,這樣Redis就永遠不會淘汰這些數(shù)據(jù)。對于那些相對不是那么重要的,并且能夠熱加載的數(shù)據(jù)(比如緩存最近登錄的用戶信息,當在Redis中找不到時,程序會去DB中讀?。?,可以設置上有效期,這樣在內存不夠時Redis就會淘汰這部分數(shù)據(jù)。
配置方法:
maxmemory-policy volatile-lru #默認是noeviction,即不進行數(shù)據(jù)淘汰本文參考資料https://www.cnblogs.com/276815076/p/7245333.html
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。