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

歡迎訪問 生活随笔!

生活随笔

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

数据库

Redis分布式快速入门

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

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

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

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

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

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

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

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

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

?

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。