Redis學習筆記(三/四)——事務及Jedis

事務

3.1基本概念

事務的本質(zhì):一組命令的集合,一個事務中的所有命令都會被序列化,在事務的執(zhí)行過程中,會按照順序執(zhí)行。

一次性,順序性,排他性 執(zhí)行一些命令

---隊列 set set set 執(zhí)行---

redis事務沒有隔離級別的概念。所有的命令在事務中,并沒有直接被執(zhí)行,只有發(fā)起執(zhí)行命令的時候才會執(zhí)行!EXCUTE

redis單條命令是保證原子性,但是redis事務是不保證原子性的

redis的事務:

開啟事務(multi)

命令入隊(其他命令。。。。)

執(zhí)行事務(exec)


取消事務(discard)

eg:

127.0.0.1:6379> multi 開啟事務

OK

127.0.0.1:6379(TX)> set k1 v1

QUEUED

127.0.0.1:6379(TX)> set k2 v2

QUEUED

127.0.0.1:6379(TX)> set k3 v3

QUEUED

127.0.0.1:6379(TX)> get k1

QUEUED

127.0.0.1:6379(TX)> get k2

QUEUED

127.0.0.1:6379(TX)> setbit mybit 1 0

QUEUED

127.0.0.1:6379(TX)> setbit mybit 0 1

QUEUED

127.0.0.1:6379(TX)> setbit mybit 2 1

QUEUED

127.0.0.1:6379(TX)> getbit mybit 1

QUEUED

127.0.0.1:6379(TX)> BITCOUNT mybit 0 -1

QUEUED

127.0.0.1:6379(TX)> exec 執(zhí)行事務

?1)OK

?2)OK

?3)OK

?4)"v1"

?5)"v2"

?6)(integer) 0

?7)(integer) 0

?8)(integer) 1

?9)(integer) 0

10) (integer) 2


取消事務

eg:

127.0.0.1:6379> multi 開始事務

OK

127.0.0.1:6379(TX)> set k2 1

QUEUED

127.0.0.1:6379(TX)> set k3 3

QUEUED

127.0.0.1:6379(TX)> DISCARD 取消事務

OK

?事務隊列中命令都不會被執(zhí)行


編譯型異常(代碼有問題,命令有錯),事務中所有的命令都不會執(zhí)行

eg:

127.0.0.1:6379> multi

OK

127.0.0.1:6379(TX)> set k1 v1

QUEUED

127.0.0.1:6379(TX)> set k2 v2

QUEUED

127.0.0.1:6379(TX)> set k3 v3

QUEUED

127.0.0.1:6379(TX)> get k3

QUEUED

127.0.0.1:6379(TX)> setbit mybit 1 0

QUEUED

127.0.0.1:6379(TX)> setbit mybit 0 0

QUEUED

127.0.0.1:6379(TX)> getbit 1? //執(zhí)行事務報錯

(error) ERR wrong number of arguments for'getbit' command

127.0.0.1:6379(TX)> getbit mybit 1

QUEUED

127.0.0.1:6379(TX)> BITCOUNT mybit 0 -1

QUEUED

127.0.0.1:6379(TX)> exec

(error) EXECABORT Transaction discardedbecause of previous errors.? //所有的命令都不會被執(zhí)行



運行時異常,如果事務隊列中存在語法性錯誤,那么執(zhí)行命令的時候,其他命令是可以正常執(zhí)行的,錯誤命令拋出異常

eg:

127.0.0.1:6379> set k1"dfa"? //將k1設置為一個字符串,

OK

127.0.0.1:6379> multi //開始事務

OK

127.0.0.1:6379(TX)> set k2 2

QUEUED

127.0.0.1:6379(TX)> set k3 3

QUEUED

127.0.0.1:6379(TX)> incr k1 //將k1 加1,執(zhí)行的時候失敗

QUEUED

127.0.0.1:6379(TX)> get k1

QUEUED

127.0.0.1:6379(TX)> get k2

QUEUED

127.0.0.1:6379(TX)> exec //執(zhí)行

1) OK

2) OK

3) (error) ERR value is not an integer or

out of range //其他命令正常執(zhí)行,只有這個命令報錯

4) "dfa"

5) "2"


3.2 監(jiān)視watch / 實現(xiàn)樂觀鎖

樂觀鎖:認為什么時候都不會出問題,所以會上鎖。更新數(shù)據(jù)的時候去判斷一下,在此期間是否有人修改過這個數(shù)據(jù)

獲取version,更改的時候比較version

悲觀鎖:執(zhí)行什么都加鎖

監(jiān)視:watch

watch [key...] 可以同時監(jiān)視多個變量,加鎖

unwatch?解鎖,如果修改值失敗,就先解鎖,然后重新獲取最近的值,再進行操作



四 .Jedis

Jedis:是redis官方推薦的java連接開發(fā)工具,使用Java操作redis中間件,應十分熟悉

我們使用java來操作redis

SpringBoot整合


之后再來補充這塊內(nèi)容

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Redis事務 可以一次執(zhí)行多個命令,本質(zhì)是一組命令的集合。一個事務中的所有命令都會序列化,按順序的串行執(zhí)行而不會...
    coolxc閱讀 124評論 0 0
  • 7. Redis事務 7.1 事務定義 Redis 通過MULTI、 DISCARD、EXEC和 WATCH四個命...
    復旦猿閱讀 418評論 0 1
  • 【redis是什么】 redis是一個開源的、使用C語言編寫的,支持網(wǎng)絡交互的、可基于內(nèi)存也可持久化的key-va...
    編輯小猿閱讀 189評論 0 0
  • NOsql 泛指非關系型數(shù)據(jù)庫,為了克服超大規(guī)模的高并發(fā)的問題,NoSQL在當今大數(shù)據(jù)環(huán)境下發(fā)展的十分迅速,Red...
    Wirdeo閱讀 354評論 0 0
  • 之前一直有聽說 Redis,但是一直沒有使用和學習過,而項目上關于緩存數(shù)據(jù)庫的知識用到的只有一點 Memcache...
    江城子Leon閱讀 263評論 0 0

友情鏈接更多精彩內(nèi)容