天天看點

Redis-狂神(8. 事務)學習筆記1. 概述2. 使用3. 監控

上一篇 :7. 三種特殊資料類型

下一篇 :9. Jedis

文章目錄

  • 1. 概述
  • 2. 使用
    • 2.1 基本使用
    • 2.2 編譯異常
    • 2.3 運作時異常
  • 3. 監控
    • 3.1 WATCH
    • 3.2 UNWATCH

1. 概述

  • 關系型資料庫的事務保持原子性 —— 要麼同時成功,要麼同時失敗
  • Redis 的單條指令是保證原子性的,但是 Redis 的事務是不保證原子性的,且沒有隔離級别的概念
  • Redis 事務的本質 : 一組指令的集合。
  • 一個事務中的所有指令都會序列化,會按照順序執行。
  • Redis 事務的特性 : 一次性、順序性、排他性。

2. 使用

Redis 事務的基本步驟:

  • 開啟事務 :MULTI
  • 指令入隊 :
  • 執行事務 :EXEC

2.1 基本使用

  1. 開啟事務
    MULTI
    Redis-狂神(8. 事務)學習筆記1. 概述2. 使用3. 監控
  2. 指令入隊
    Redis-狂神(8. 事務)學習筆記1. 概述2. 使用3. 監控
  3. 執行事務
    EXEC
    Redis-狂神(8. 事務)學習筆記1. 概述2. 使用3. 監控
  4. 放棄事務

    重新整理一個事務中所有在排隊等待的指令,并且将連接配接狀态恢複到正常。

    Redis-狂神(8. 事務)學習筆記1. 概述2. 使用3. 監控

2.2 編譯異常

  • 指令有錯,在啟動的時候報錯,那麼事務中所有的指令都不會執行
Redis-狂神(8. 事務)學習筆記1. 概述2. 使用3. 監控

2.3 運作時異常

  • 如果事務隊列中有文法性錯誤(1 ÷ 0 的問題),隻有錯誤的這一條不會執行,其他指令是可以執行的
Redis-狂神(8. 事務)學習筆記1. 概述2. 使用3. 監控
  • 上面這個例子更加直覺的說明了,Redis 的事務不具有原子性的特征。

3. 監控

  • 悲觀鎖 :很悲觀,覺得什麼時候都會出問題,無論做什麼都會加鎖。
  • 樂觀鎖 :很樂觀,覺得什麼時候都不會出問題,是以做什麼都不加鎖,隻是在更新資料的時候檢查判斷一下版本是否改變。
    • 在 MySQL 中用 Version 表示版本
    • Redis 中用 WATCH
  • 如果事務執行成功 Redis 監控就會自動取消

3.1 WATCH

  1. 監視所有被标記的 key
    WATCH key [key …]
    Redis-狂神(8. 事務)學習筆記1. 概述2. 使用3. 監控
  2. 模拟執行成功
Redis-狂神(8. 事務)學習筆記1. 概述2. 使用3. 監控
  1. 模拟執行過程中資料被改

    先在用戶端 1 上開啟事務,但是先不要執行

    Redis-狂神(8. 事務)學習筆記1. 概述2. 使用3. 監控
    建立立一個連接配接,并修改資料
    Redis-狂神(8. 事務)學習筆記1. 概述2. 使用3. 監控
    執行事務
    Redis-狂神(8. 事務)學習筆記1. 概述2. 使用3. 監控

3.2 UNWATCH

  • 重新整理一個事務中已被監視的所有key。
  • 如果像上述例子一樣,資料在事務執行前被修改了,這種情況就需要重新整理一下監視,然後再重新監視它
Redis-狂神(8. 事務)學習筆記1. 概述2. 使用3. 監控

繼續閱讀