這篇文章帶大家了解一下Redis分區,介紹為什麼要做Redis分區,Redis分區的實現方案,以及Redis分區的缺點,希望對大家有幫助!
Redis是單執行緒的,如何提高多核心CPU的利用率?
可以在同一個伺服器部署多個Redis的實例,並把他們當作不同的伺服器來使用,在某些時候,無論如何一個伺服器是不夠的, 所以,如果你想使用多個CPU,你可以考慮分片(shard)。 【相關建議:Redis影片教學】
為什麼要做Redis分割區?
分割區可以讓Redis管理更大的內存,Redis將可以使用所有機器的記憶體。如果沒有分區,你最多只能使用一台機器的記憶體。分區使Redis的運算能力透過簡單地增加電腦而成倍提升,Redis的網路頻寬也會隨著電腦和網路卡的增加而成倍增長。
有哪些Redis分割區實作方案?
1、客戶端分區就是在客戶端就已經決定資料會被儲存到哪個redis節點或從哪個redis節點讀取。大多數客戶端已經實現了客戶端分區。
2、代理分區 意味著客戶端將請求傳送給代理,然後代理決定去哪個節點寫資料或讀取資料。代理根據分區規則決定要要求哪些Redis實例,然後根據Redis的回應結果傳回給客戶端。 redis和memcached的一種代理實作就是Twemproxy。
3、查詢路由(Query routing) 的意思是客戶端隨機地請求任一個redis實例,然後由Redis將請求轉送給正確的Redis節點。 Redis Cluster實作了一種混合形式的查詢路由,但並不是直接將請求從一個redis節點轉送到另一個redis節點,而是在客戶端的幫助下直接redirected到正確的redis節點。
Redis分割區有什麼缺點?
1、涉及多個key的操作通常不會被支援。例如你不能對兩個集合求交集,因為他們可能被儲存到不同的Redis實例(實際上這種情況也有辦法,但是不能直接使用交集指令)。
2、同時操作多個key,則不能使用Redis交易。
3、分區使用的粒度是key,不能使用一個非常長的排序key儲存一個資料集(The partitioning granularity is the key, so it is not possible to shard a dataset with a single huge key like a very big sorted set)
4、當使用分割區的時候,資料處理會非常複雜,例如為了備份你必須從不同的Redis實例和主機同時收集RDB / AOF檔。
5、分割時動態擴容或縮容可能非常複雜。 Redis叢集在執行時增加或刪除Redis節點,能做到最大程度對使用者透明地資料再平衡,但其他一些客戶端分割區或代理分割區方法則不支援此特性。然而,有一種預分片的技術也可以較好的解決這個問題。
更多程式相關知識,請造訪:程式設計影片! !
以上是為什麼要做Redis分區?有哪些實現方案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!