(十)redis原始碼解讀

2022-06-30 04:12:13 字數 1931 閱讀 4075

redis是 單執行緒,所有命令(set,get等)都會加入到佇列中,然後乙個個執行。

1、基於記憶體 

2、redis協議resp 簡單、可讀、效率高

redis是乙個serversocket伺服器,而jedis是乙個socket客戶端類似redis-cli,用於與redis通訊,而redis和jedis之間通訊用的就是resp,如下圖,如果jedis要設定乙個值,命令是:set name shyroke,轉為resp協議為:

*3

$3set

$4name

$7shyroke

而如果jedis想要獲取乙個值,傳送指令:get name,轉為resp為:

如果資料量太大,乙個redis存不下,那麼此時就需要分表分庫。

最簡單的做法編寫乙個**伺服器,不管是資料庫還是客戶的快取都通過**,然後key進行路由,具體做法是對key長度進行取模,所得的結果就是相應的redis伺服器。

(1)啟動3個redis伺服器,只要複製3份redis的配置檔案(redis.window.conf),修改其中的埠號,然後分別指令碼啟動啟動:redis-serve.exe 配置1.conf    redis-serve.exe 配置2.conf   redis-serve.exe 配置3.conf 

(2)客戶端請求**伺服器,**伺服器解析resp協議,並使用**演算法(key長度取模)計算相應的redis伺服器,然後進行操作。**演算法:此時有3臺伺服器,此時執行:set name shyroke ,key的值為name,那麼對key長度取模 = 4%3 = 1 ,所以此時會執行第二台redis伺服器,也就是會往第二台**伺服器中存資料。

(3)測試如下圖,19000是**伺服器的埠,此時jedis連線**伺服器,然後存乙個值a=enjoy_a,a的長度是1,此時伺服器有3臺,所以1%3=1,所以此時會向第二台伺服器也就是127.0.0.1:6380這台伺服器存乙個值。

如果有讀多寫少或者讀少寫多的場景,尤其是電商專案,讀多寫少,此時可以進行讀寫分離,也就是說可以用一台伺服器用於寫操作,多台伺服器進行讀操作。

以三颱伺服器為例如下圖,關鍵是資料同步,也就是說寫的那台資料庫的資料如何同步到其他用於讀的資料庫裡。

1、修改兩台讀的redis伺服器的配置檔案,如下圖,需要注意的是,加了下圖的配置後就不能進行寫(set)操作,只能往主節點(即寫伺服器)中寫,只能進行讀操作(get)

2、主節點(本例中為寫伺服器)掛了怎麼辦?

1、檢查主節點狀態

2、切換主節點。

JQuery3 1 1原始碼解讀 十 hooks

hooks 在英語中的意思表示鉤子或掛鉤,在 jquery 中也有 hooks 這麼乙個概念,它的功能在考慮到一些相容性和其它特殊情況的條件下,優先考慮這些特殊情況,而後才去用普通的方法處理,這種說法還是比較形象的。hooks 的使用非常用技術含量,可以支撐在原來的基礎上擴充套件,而對於介面則無需改...

openTLD 原始碼解讀

首先是run tld 在其次就是tldexample 最後到了初始化函式tldinit 第乙個比較關鍵的函式 bb scan 將影象網格化,將首先 scale 1.2.10 10 21 個規格 在每個規格上打網格 這個函式有乙個比較重要的方法 ntuples 就是重複 因為網格上的點很多點有相同的x...

thinkphp原始碼解讀

thinkphp原始碼解讀 thinkphp原始碼的根目錄下是 index.php,是系統預設的 主頁,index.php中首先檢測的是 php執行環境,如果php版本小於 5.3.0則退出執行,定義是否為除錯模式,定義應用目錄,引入入口檔案。thinkphp是整個框架的入口檔案,在thinkphp...