成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Jedis源碼理解

企業(yè)動態(tài)
最近新開了博客,打算把以前記錄的筆記分享出來,就從Jedis(2.5.X)源碼開始吧。以下是我看完Jedis源碼后的個人理解,用問答的形式,比較隨意。

以下是我看完Jedis源碼后的個人理解,用問答的形式,比較隨意。

[[179199]]

1. Redis是什么?

一個緩存,基于內(nèi)存進行操作。

2. Jedis是什么?

Redis的Java客戶端,用于操作Redis。

3. Jedis如何與Redis交互?

遵循Redis協(xié)議,使用socket連接操作Redis

如果是單行回復,那么***個字節(jié)是[+]

如果回復的內(nèi)容是錯誤信息,那么***個字節(jié)是[_]

如果回復的內(nèi)容是一個整型數(shù)字,那么***個字節(jié)是[:]

如果是bulk回復,那么***個字節(jié)是[$]

如果是multi-bulk回復,那么***個字節(jié)是[*]

4. Jedis的連接池是怎么回事?

通過實現(xiàn)common包中的GenericObjectPool創(chuàng)建連接池,通過實現(xiàn)BasePoolableObjectFactory生產(chǎn)連接,從而達到創(chuàng)建連接池的效果。

5. Jedis如何操作?

set:Jedis將傳入的key、value和command封裝,通過socket創(chuàng)建連接,用outputStream將命令打出,用inputStream獲取返回的標記。

get:同set。

6. shardJedis是怎么回事?

所謂的分布式Redis,是Jedis客戶端實現(xiàn)的一種模式。啟動n臺Redis,他們就在那提供服務,不會自己做集群。

6.1 那Jedis是如何實現(xiàn)的呢?

創(chuàng)建shardJedisPool的時候,客戶端將傳進來的n臺機器,用每個機器的機器名做了一致性hash,并給每個機器創(chuàng)建160*weight個虛擬節(jié)點,虛擬節(jié)點也是將名字+i做hash。然后將這些hash值作為key存到一個TreeMap中,即nodes,TreeMap是有序的。

6.2 為什么做虛擬節(jié)點?

因為不坐虛擬節(jié)點時,可能會出現(xiàn)集群中的某一個節(jié)點頻繁被***,而其他節(jié)點則沒有工作量,造成數(shù)據(jù)不均衡,增加了虛擬節(jié)點,數(shù)據(jù)會均衡很多。這就是Jedis的均衡性。

6.3 TreeMap每個key的value存什么呢?

存放的是對應的機器的信息bean,即JedisShardInfo,這樣不難看出,如果以權重weight為1為例,那么每個機器會創(chuàng)建160個節(jié)點(真實+虛擬),這樣如果有4個實體機安裝了Redis,那么在nodes中就有160*4條記錄,其中每160條對應一個相同的JedisShardInfo。

Jedis同時又維護了一個Map<ShardInfo<R>,R>即resources,這個map的key存放JedisShardInfo實體,value存放的是通過這個實體JedisShardInfo中的ip:port創(chuàng)建的Jedis,所以,以上面的例子為例,resources中信息的條數(shù)就是4。

這樣,當客戶端用set(key,value)時,Jedis將客戶端的key同樣用一致性hash取hash值,然后到nodes中獲取比key一致性hash出來的值大的值,取***個,即所謂的向右移,這樣會獲取一個JedisShardInfo,通過JedisShardInfo到resources中獲取Jedis返回,這樣客戶端就可以通過這個Jedis做增刪改查的操作了。

7. 一致性hash是怎么回事?

一致性hash是一個算法,簡單來說就是將你所需要的值(如key:lilei)取hash值,然后與2^23取余數(shù),得到的值。如lilei取hash是37184759,那么37184759%2^23=376,這個376就是一致性hash取出來的值。這個2^23是什么意思呢?它的值為255*255*255*255,不難發(fā)現(xiàn),這個值是網(wǎng)絡中***的ip數(shù),即一個網(wǎng)絡中最多的機器數(shù)。之所以取這個數(shù),是為了當需要添加或刪除機器的時候,不至于讓其他節(jié)點失效,這就是一致性。

可能文章中會有一些錯誤,希望童鞋們指正,我希望可以在博客的路上與大家多多交流,共同進步。

【本文為51CTO專欄作者“王森豐”的原創(chuàng)稿件,轉載請注明出處】

責任編輯:龐桂玉 來源: 神算子
相關推薦

2016-10-26 20:49:24

ReactJavascript前端

2022-11-02 21:45:54

SPIJava

2021-05-26 05:22:09

Virtual DOMSnabbdom虛擬DOM

2017-08-18 12:40:21

Python源碼解析

2022-12-23 08:34:30

HookReact

2017-06-16 20:30:54

Python源碼理解

2020-09-18 06:37:18

Rarp協(xié)議操作系統(tǒng)

2016-11-03 13:19:38

vue.jsjavascript前端

2021-05-18 06:55:07

Java AQS源碼

2020-11-10 09:17:03

Redis

2024-01-29 15:54:41

Java線程池公平鎖

2024-09-18 08:10:06

2021-09-08 06:51:52

AndroidRetrofit原理

2021-10-15 09:19:17

AndroidSharedPrefe分析源碼

2024-10-05 00:00:06

HTTP請求處理容器

2022-11-11 10:48:55

AQS源碼架構

2021-08-24 07:53:28

AndroidActivity生命周期

2021-02-20 09:45:02

RPC框架Java

2022-12-07 11:21:30

Reactdiff

2015-01-14 13:22:36

OpenStack創(chuàng)建快照glance api
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91精品国产91久久久久久最新 | 国产一区二| 人成在线视频 | 国产粉嫩尤物极品99综合精品 | 美日韩精品 | 日日艹夜夜艹 | 女人毛片a毛片久久人人 | 新超碰97| 国产视频91在线 | 第一av| 日韩午夜 | 免费成人在线网站 | 欧美在线日韩 | 国产精品久久久久一区二区三区 | 亚洲一区三区在线观看 | 国产日韩欧美 | 国产高清精品网站 | 99re视频精品| 欧美a区| 久久一区二区av | 国产高清在线精品一区二区三区 | a级在线| 在线国产视频 | 亚洲91视频 | 国内精品99 | 国产91丝袜在线18 | 久草在线中文888 | h视频免费在线观看 | 中文字幕在线网 | 九九天堂网| 精品在线观看一区 | 久久亚洲一区二区三区四区 | 欧美精品片 | 中文字幕在线一区二区三区 | 成人精品一区二区三区中文字幕 | 一级在线毛片 | 99亚洲精品 | 91精品国产手机 | 久久久久久久国产精品视频 | 97福利在线 | 小h片免费观看久久久久 |