日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis分布式快速入门

發(fā)布時間:2024/4/13 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis分布式快速入门 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
現(xiàn)在學(xué)習(xí)Redis的分布式,我們先看一下目錄,首先講的是分布式算法的原理,這里用的是一致性算法,這種算法也會被經(jīng)常問到,分布式環(huán)境的配置,還有分布式服務(wù)端和客戶端的啟動,封裝分布式Shard Redis API,Shard就是分片,然后是在分布式環(huán)境下進行驗證,在實戰(zhàn)的最后呢,還會講解一下集群和分布式的概念,因為這兩個概念呢,特別容易弄混,所以這里特意講解一下,開始我們分布式算法的原理,我們先從傳統(tǒng)的分布式算法來講,然后再講Consistent hashing算法的原理,后面還會講一下hash的傾斜性,還有虛擬節(jié)點,Consistent hash命中率的一個計算,首先舉個例子,假設(shè)我們有一個圖片叫test.jpg,然后我現(xiàn)在有三個服務(wù)器,我們稱之為0服務(wù)器,1服務(wù)器,2服務(wù)器,為什么稱之為0,一會你就會理解,首先我們對test.jpg這個文件,進行一個hash,我們可以拿到一個散列的值,然后用這個散列的值呢,對3取模,取模大家都知道,就是用這個數(shù)取3之后的余數(shù),如果被整除呢,那么他的模,就是0,不能被整除就是1或者2,最多余1或余2,如果感覺這個抽象的話,你就認為hash(test.jpg)這么一個公式,返回一個數(shù)字,假設(shè)你認為它是100就可以了,那么100對3的取模肯定是1,余數(shù)是1,取模之后只有0,1,2,那如果0的話,就把它存在0這個節(jié)點上,如果是1的話,那就把它存在1這個服務(wù)節(jié)點上,如果是2的話,就把它存在2這個服務(wù)節(jié)點上

假設(shè)我們現(xiàn)在有4個REDIS節(jié)點,redis0,reids1,redis2,redis3,那為什么要用0呢,剛剛也說了,是為了取模,我們現(xiàn)在有4個redis節(jié)點,然后有20個數(shù)據(jù),那這個都是打個比方,實際的生產(chǎn)環(huán)境中,我們的數(shù)據(jù)可能是成千上萬,那現(xiàn)在有20個數(shù)據(jù),那么1到20大家就認為,這是對hash之后的一個結(jié)果,然后我們繼續(xù)看

對應(yīng)4個節(jié)點,然后我們開始放20個數(shù)據(jù),因為我們是4個節(jié)點,所以要對4取模,1除4除不開,余1,所以他會放到1節(jié)點上,2除4余2,放在redis2節(jié)點上,這20個數(shù)據(jù)全部找到對應(yīng)的redis server節(jié)點上了,那我們現(xiàn)在生產(chǎn)環(huán)境突然發(fā)現(xiàn),redis的節(jié)點不夠用了,需要新增節(jié)點,或者是說,我們發(fā)現(xiàn)redis這個集群,負載非常低,我們可以刪除一個節(jié)點,來節(jié)省我們的資源,畢竟呢我們增加一個節(jié)點呢,無論是從硬件還是日常消耗上呢,電費,寬帶費等等之類的,都是有日常消耗的,從節(jié)約能源的考慮呢,也有可能會刪除的,那現(xiàn)在我們的場景是增加了一個節(jié)點

5個redis節(jié)點,我們把5個節(jié)點放到這里,redis0到redis4,一共5個,現(xiàn)在呢我們把這個20個數(shù),重新放到這5個redis當中,這20個數(shù)據(jù)都放好了,那現(xiàn)在回想一下,剛剛是4個節(jié)點的時候,我們看一下,redis0中的20,redis1中的1,redis2中的2,redis3中的3,還有redis3中的18,在四個節(jié)點和五個節(jié)點中,他們存儲的服務(wù)器是一樣的,假設(shè)我們之前是4個節(jié)點,這20個數(shù)也存起來了,現(xiàn)在呢我們擴容,增加了一臺redis4,發(fā)現(xiàn)這5個數(shù)據(jù)呢,還能get到,他們存儲的位置沒有任何變化,這個例子呢,也不能太多,實際生產(chǎn)環(huán)境的量級呢,比這個大的多的多,千萬,百萬,上億,都是有可能的,那然后我們先看一下結(jié)論

redis0只有20命中,redis1只有1命中,redis3有3和18命中,那命中率就是5/20=25%,那一會我們還會講一下,一致率算法的一個公式,當然因為我們的量級比較少,所以不是太明顯,一會我們看到公式,講解一下就OK了,然后我們先說Consistent hashing,一致性hash算法,那Consistent hashing呢,算法早在1997年論文一致性算法,和隨機森林算法當中提出了,那我們現(xiàn)在來講解他,首先我們理解一個環(huán)形hash空間

通常哈希算法都是將value,映射在一個32位的,key值當中,那我們把這個數(shù)軸,卷起來,變成了一個首尾相接的圓環(huán),他的取值范圍呢,就是從0開始,一直到2的32次冪減1,現(xiàn)在呢我們這個環(huán)形哈希空間呢,已經(jīng)構(gòu)成了,下一步就是把對象,映射到這個環(huán)形哈希空間上,接下來我們考慮四個對象,object1到object4,然后通過hash函數(shù)呢,計算出這四個對象的hash值,那這個值,肯定會落在我們這個環(huán)形哈希空間上的,我們看一下圖

首先這個圓環(huán)在這里,object1出現(xiàn),然后對他進行一個hash,hash之后啊,他肯定落在2的32次方減1范圍里,然后呢,落在了這個位置,我們把object1哈希之后的值叫key1,然后2,3,4呢,也是同理,那么現(xiàn)在四個object全部落在環(huán)形空間當中,那么這個就是把對象映射到環(huán)形空間

接下來我們就要把cache映射到hash空間當中,那基本思想就是將對象和cache都映射到同一個hash數(shù)值空間中,并且使用相同的hash算法,對cacheA等等進行一個hash,前面的object呢,用的數(shù)字,這里面的cache就用字母,那這里面就要講一下,對于cache的hash對象,一般的方法可以使用機器的ip地址,或者機器名,作為hash的一個輸入,那也可以引入更過的因子,例如說他的端口號,也可以引入進來,然后呢,繼續(xù)看

那還是這個圖,現(xiàn)在這個圖呢,就是object,都已經(jīng)存在在環(huán)形空間當中,那這個2的32次方減1,代表這個環(huán)形的一個容量,從0開始,到他的一圈結(jié)束之后呢,它能夠存放2的32次方減1的數(shù)字,然后呢我們繼續(xù),這個時候cacheA出現(xiàn),那我們稱它一映射的key叫keyA,他也存到了這個環(huán)形空間當中,同理,CacheB也出現(xiàn)了,CacheC也出現(xiàn)了,假設(shè)我們就3個Cache,我們繼續(xù)看,現(xiàn)在Cache和數(shù)據(jù)對象啊,都已經(jīng)通過同一個hash算法,映射到這個hash環(huán)形空間當中了,接下來我們要考慮的是,如何把這個對象呢,映射到Cache上面了,首先在這個環(huán)形空間當中,如果沿著這個key所在的位置,順時針出發(fā),他碰到第一個Cache節(jié)點,是keyA,也就是cacheA,那keyA就要存到這個藍色cacheA節(jié)點當中,那因為對象是hash,和cache的hash是固定的,因此呢這個key,存到這個cache當中,必然是唯一并且是確定的,這樣就找到了我們數(shù)據(jù),映射cache的一個方案,那么我們接下來看一下動畫,首先key1映射到cacheA上,然后是key2,key2順時針往上走,那找到第一個cache節(jié)點呢,就是cacheC,所以key2,object2,這個數(shù)據(jù)會存到CacheC上,同理繼續(xù),那object3呢,會存到cacheC上,object4呢,那現(xiàn)在我們圓環(huán)里四個紅點,數(shù)據(jù)都已經(jīng)找到了cache空間,都已經(jīng)找到了要存到哪個cache服務(wù)器上,剛剛也說了,我們生產(chǎn)環(huán)境可能會調(diào)整,刪除一個cache節(jié)點,或者增加一個cache節(jié)點,那傳統(tǒng)的hash算法,取模的方式對后臺的服務(wù)器,造成了巨大的沖擊,很多緩存都沒有命中,如果你的業(yè)務(wù)代碼呢,穿透型的,那就會穿過cache,直擊DB,很容易把數(shù)據(jù)庫搞垮,那現(xiàn)在我們就來看一下,Consistent hashing,一致性算法的精髓所在,我們就要變動這個cache節(jié)點了,那我們現(xiàn)在開始移除cache節(jié)點,還是這個圖,我們首先把cacheB消失掉

?

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術(shù)人生

總結(jié)

以上是生活随笔為你收集整理的Redis分布式快速入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。