Jedis原始碼解析(Transation事務)

2021-07-10 16:27:58 字數 1688 閱讀 9683

redis中的事務(transaction)是一組命令的集合。事務同命令一樣都是redis最小的執行單位,乙個事務中的命令要麼都執行,要麼都不執行。redis事務的實現需要用到 multi 和 exec 兩個命令,事務開始的時候先向redis伺服器傳送 multi 命令,然後依次傳送需要在本次事務中處理的命令,最後再傳送 exec 命令表示事務命令結束。其原理流程如下:

實現案例:

我草勒,竟然與pipeline類繼承相同的父類(multikeypipelinebase)、實現相同的介面(closeable)!

先上**:起乙個事務,插入乙個string和乙個hash

所以其過程在形式上與原理流程是一一對應的。

pipeline一樣,transaction也是binaryjedis的成員變數,獲取transaction的例項直接通過其multi()方法

在返回transaction物件之前,multi()方法還幹了兩件事情,不對嚴格意義上講就是一件事情那就是想redis server傳送「multi」命令,只不過其實現放在兩個方法中

在client的multi()中send multi command,同時修改狀態標誌位,此時redis server沒有接收到multi的命令,命令仍然在outputstream中

接下來就是flush outputstream了

好的流程的第一步實現了,第二步就直接跳過吧!

(2) exec

好的,下面就是三個關鍵的點!

1)getmany()的方法將第二步中的所有命令flush,這與pipeline的思想是完全一樣的!

2)exec()方法就是send exec command,但是依舊沒有flush

3)不用急,flush在這裡getobjectmultibulkreply

那麼再來總結一下jedis的transaction流程吧

Fabric 原始碼解析 原始碼目錄解析

這裡對重要的一些目錄進行說明 bccsp 與密碼學 加密 簽名 證書等等 相關的加密服務 將fabric中用到的密碼學相關的函式抽象成了一組介面,便於拓展。bddtests 一種新型的軟體開發模式 行為驅動開 需求 開發 common 一些公共庫 錯誤處理 日誌處理 賬本儲存 策略以及各種工具等等 ...

Spring原始碼解析之 Aop原始碼解析(2)

spring aop 更多的是oop開發模式的乙個補充,幫助oop以更好的方式來解決對於需要解決業務功能模組之上統一管理 的功能 以一副圖來做為aop功能的說明更直觀些。對於類似系統的安全檢查,系統日誌,事務管理等相關功能,物件導向的開發方法並沒有更好的解決方法 aop引入了一些概念。更多的是spr...

Integer原始碼解析

public class test else integer i3 200 integer i4 200 if i3 i4 else 結果為 原因integer 類會快取 128 到 127 之間的整數 但是如果new interger的話就是不同的物件了 源 分析 如果是在 128到正的127之間...