分區(qū)是分割數(shù)據(jù)到多個redis實例的處理過程,因此每個實例只保存key的一個子集。今天小編給大家分享的是redis分區(qū)有什么好處?redis分區(qū)的詳細介紹,很多人都不太了解,今天小編為了讓大家更加了解,所以給大家總結了以下內容,一起往下看吧。一定會有所收獲的哦。
創(chuàng)新互聯(lián)建站-專業(yè)網站定制、快速模板網站建設、高性價比濱湖網站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式濱湖網站制作公司更省心,省錢,快速模板網站建設找我們,業(yè)務覆蓋濱湖地區(qū)。費用合理售后完善,10年實體公司更值得信賴。
我們?yōu)槭裁匆謪^(qū)?分區(qū)的動機是什么?通常來說,Redis分區(qū)的好處大致有如下兩個方面:
1、性能的提升,單機Redis的網絡I/O能力和計算資源是有限的,將請求分散到多臺機器,充分利用多臺機器的計算能力可網絡帶寬,有助于提高Redis總體的服務能力。
2、存儲的橫向擴展,即使Redis的服務能力能夠滿足應用需求,但是隨著存儲數(shù)據(jù)的增加,單臺機器受限于機器本身的存儲容量,將數(shù)據(jù)分散到多臺機器上存儲使得Redis服務可以橫向擴展。
總的來說,分區(qū)使得我們本來受限于單臺計算機硬件資源的問題不再是問題,存儲不夠?計算資源不夠?帶寬不夠?我們都可以通過增加機器來解決這些問題。
Redis分區(qū)基礎
實際應用中有很多分區(qū)的具體策略,舉個例子,假設我們已經有了一組四個Redis實例分別為R0、R1、R2、R3,另外我們有一批代表用戶的鍵,如:user:1,user:2,……等等,其中“user:”后面的數(shù)字代表的是用戶的ID,我們要做的事情是把這些鍵分散存儲在這四個不同的Redis實例上。
怎么做呢?最簡單的一種方式是范圍分區(qū)(range partitioning),下面我們來看看基于范圍分區(qū)怎么做。
范圍分區(qū)
所謂范圍分區(qū),就是將一個范圍內的key都映射到同一個Redis實例中,加入數(shù)據(jù)集還是上面提到的用戶數(shù)據(jù),具體做法如下:
我們可以將用戶ID從0到10000的用戶數(shù)據(jù)映射到R0實例,而將用戶ID從10001到20000的對象映射到R1實例,依次類推。
這種方法雖然簡單,但是在實際應用中是很有效的,不過還是有問題:
1、我們需要一張表,這張表用來存儲用戶ID范圍到Redis實例的映射關系,比如用戶ID0-10000的是映射到R0實例……。
2、我們不僅需要對這張表進行維護,而且對于每種對象類型我們都需要一個這樣的表,比如我們當前存儲的是用戶信息,如果存儲的是訂單信息,我們就需要再建一張映射關系表。
3、如果我們想要存儲的數(shù)據(jù)的key并不能按照范圍劃分怎么辦,比如我們的key是一組uuid,這個時候就不好用范圍分區(qū)了。
哈希分區(qū)
哈希分區(qū)跟范圍分區(qū)相比一個明顯的優(yōu)點是哈希分區(qū)適合任何形式的key,而不像范圍分區(qū)一樣需要key的形式為object_name:<id>,而且分區(qū)方法也很簡單,一個公式就可以表達:
id=hash(key)%N
其中id代表Redis實例的編號,公式描述的是首先根據(jù)key和一個hash函數(shù)(如crc32函數(shù))計算出一個數(shù)值型的值。接著上面的例子,我們的第一個要處理的key是user:1,hash(user:1)的結果是93024922。
然后哈希結果進行取模,取模的目的是計算出一個介于0到3之間的值,因此這個值才可以被映射到我們的一臺Redis實例上面。比如93024922%4結果是2,我們就會知道foobar將要被存儲在R2上面。
不同的分區(qū)實現(xiàn)
分區(qū)可以在redis軟件棧的不同部分被實現(xiàn),我們來看看下面幾種:
客戶端實現(xiàn)
客戶端實現(xiàn)即key在redis客戶端就決定了要被存儲在那臺Redis實例中,見下圖:
代理實現(xiàn)
代理實現(xiàn)即客戶端將請求發(fā)往代理服務器,代理服務器實現(xiàn)了Redis協(xié)議,因此代理服務器可以代理客戶端和Redis服務器通信。代理服務器通過配置的分區(qū)schema來將客戶端的請求轉發(fā)到正確的Redis實例中,同時將反饋消息返回給客戶端。
代理實現(xiàn)Redis分區(qū)示意圖如下:
查詢路由
查詢路由是Redis Cluster實現(xiàn)的一種Redis分區(qū)方式:
查詢路由的過程中,我們可以將查詢請求隨機的發(fā)送到任意一個Redis實例,這個Redis實例負責將請求轉發(fā)至正確的Redis實例中。Redis集群實現(xiàn)了一個通過和客戶端協(xié)作的hybrid來做查詢路由。
Redis分區(qū)的缺點
盡管Redis分區(qū)到現(xiàn)在為止,so far so good,但是Redis分區(qū)有一些致命的缺點,這導致一些Redis功能在分區(qū)的環(huán)境下并不能很好地工作,我們來看看:
1、多鍵操作是不被支持的,比如我們將要批量操作的鍵被映射到了不同的Redis實例中。
2、多鍵的Redis事務是不被支持的。
3、分區(qū)的最小粒度是鍵,因此我們不能將關聯(lián)到一個鍵的很大的數(shù)據(jù)集映射到不同的實例。
4、當應用分區(qū)的時候,數(shù)據(jù)的處理是非常復雜的,比如我們需要處理多個rdb/aof文件,將分布在不同實例的文件聚集到一起備份。
5、添加和刪除機器是很復雜的,例如Redis集群支持幾乎運行時透明的因為增加或減少機器而需要做的rebalancing,然而像客戶端和代理分區(qū)這種方式是不支持這種功能的。
持久存儲用還是緩存
盡管數(shù)據(jù)分區(qū)對于Redis來說無論是數(shù)據(jù)持久化存儲還是緩存,在概念上都是一樣的,然而對于數(shù)據(jù)持久化存儲還是有一個很大的限制。
當我們使用Redis來作為持久化存儲的時候,每一個key必須一直被映射到同一個Redis實例。而當Redis被當做緩存使用的時候,對于這個key,如果一個實例不能用了,這個key還可以被映射到其他的實例中。
Consistent hashing實現(xiàn)通常使得當一個key被映射到的實例不能用的時候將這個key映射到其他實例成為可能。類似,如果增加了一臺機器,一部分的key將會被映射到這臺新的機器上,我們需要了解的兩點如下:
1、如果Redis被用來當做緩存,且要求容易增加或刪除機器,使用consistent hashing是非常簡單的。
2、如果Redis被用來當做(持久)存儲,一個固定的key到實例的映射是需要的,因此我們不能夠再靈活的添加或刪除機器。否則,我們需要在增加或刪除機器的時候系統(tǒng)能夠rebalace,當前Redis Cluster已經支持。
Pre-Sharding
通過上面的介紹,我們知道Redis分區(qū)應用起來是有問題的,除非我們只是使用Redis當做緩存,否則對于增加機器或刪除機器是非常麻煩的。
然而,通常我們Redis容量變動在實際應用中是非常常見的,比如今天我需要10臺Redis機器,明天可能就需要50臺機器了。
鑒于Redis是很輕量級的服務(每個實例僅僅占用1M),對于上面的問題一種簡單的解決辦法是:
我們可以開啟多個Redis實例,盡管是一臺物理機器,我們在剛開始的時候也可以開啟多個實例。我們可以從中選擇一些實例,比如32或64個實例來作為我們的工作集群。當一臺物理機器存儲不夠的時候,我們可以將一般的實例移動到我們的第二臺物理機上,依次類對,我們可以保證集群中Redis的實例數(shù)不變,又可以達到擴充機器的目的。
怎么移動Redis實例呢?當需要將Redis實例移動到獨立的機器上的時候,我們可以通過下面步驟實現(xiàn):
1、在新的物理機上啟動一個新的Redis實例。
2、將新的物理機作為要移動的那臺的slave機器。
3、停止客戶端。
4、更新將要被移動的那臺Redis實例的IP地址。
5、對于slave機器發(fā)送SLAVEOF ON ONE命令。
6、使用新的IP啟動Redis客戶端。
7、關閉不再使用的那個Redis實例。
以上就是redis分區(qū)有什么好處?redis分區(qū)的簡略介紹,當然詳細使用上面的不同還得要大家自己使用過才領會。如果想了解更多,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道哦!
名稱欄目:redis分區(qū)有什么好處?redis分區(qū)的詳細介紹
分享地址:http://jinyejixie.com/article44/jjiihe.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供動態(tài)網站、手機網站建設、定制開發(fā)、面包屑導航、虛擬主機、標簽優(yōu)化
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)