redis學習(四)redis事務

来源:https://www.cnblogs.com/xiaoxiongcanguan/archive/2018/11/08/9928702.html
-Advertisement-
Play Games

redis事務 1.redis事務介紹 redis的事務可以理解為一系列串列命令的集合。redis的事務和單條命令一樣,都是redis的最小執行單位,因此一個事務內的命令,要麼全部執行,要麼全部不執行。事務的概念對於熟悉資料庫的人們並不陌生,而redis作為一個資料庫系統,必然會對事務進行一定的支持 ...


redis事務

1.redis事務介紹

  redis的事務可以理解為一系列串列命令的集合。redis的事務和單條命令一樣,都是redis的最小執行單位,因此一個事務內的命令,要麼全部執行,要麼全部不執行。事務的概念對於熟悉資料庫的人們並不陌生,而redis作為一個資料庫系統,必然會對事務進行一定的支持。
  redis實現事務的方式簡單來說是將一系列的命令先保存在一個隊列中,然後交給redis串列化的順序執行。

2.redis事務常用命令

  2.1 MULTI(開啟事務)

    MULTI命令:用於開啟redis事務。在同一個客戶端內,一旦開啟了事務,代表著進入了事務狀態,後續輸入的所有命令都將被加入事務命令隊列,而不是立即執行。   

  2.2 EXEC(提交事務)

    EXEC命令:用於提交事務。提交事務代表著將當前事務命令隊列中的命令交給redis一併執行。

  2.3 DISCARD(放棄事務)

    DISCARD命令:用於放棄事務。放棄事務代表著銷毀當前事務命令隊列,不進行任何操作,同時當前客戶端退出事務狀態。

  2.4 WATCH

    WATCH命令:用於監視key的變化。由於redis支持多用戶,通常在執行事務的過程中,不希望其它的用戶修改我們正在操作的key。redis出於併發性能的考慮,不支持悲觀鎖的機制(通過阻塞或者報錯來阻止其它用戶修改上鎖的數據),而是採用了類似樂觀鎖的機制。redis提供了WATCH命令來實現事務的“檢查再設置”(CAS)行為,WATCH命令可以同時監聽多個key的變化,在事務執行過程中一旦發現被監聽的key被修改過,將會放棄執行事務,這時應該由用戶來進行重試。

  2.5 UNWATCH

    UNWATCH命令:用於解除WATCH狀態。UNWATCH之後,當前客戶端將解除所有的WATCH監聽

3.redis事務—錯誤處理

  在事務執行過程中可能會出現錯誤,redis將錯誤分為兩類區別對待。

  3.1語法錯誤(編譯時錯誤)

  語法錯誤,即redis執行的命令本身就是錯誤的,這類錯誤可以在事務真正執行之前就發現,例如參數不符合規範等。如同通用編程語言的編譯時錯誤,由於這樣的錯誤應當通過仔細的檢查來完全避免,因此,redis在發現事務中存在語法錯誤時,會放棄整個事務。

  3.2非語法錯誤(運行時錯誤)

  非語法錯誤,即redis無法在真正執行命令之前發現的錯誤。例如incr要求數據必須是數字類型,而是否是數字類型,取決於運行時的狀態。如同通用編程語言的運行時錯誤,由於這樣的錯誤通常無法避免,因此,redis在發現命令存在非語法錯誤時,不會影響事務中其它命令的正常執行。

4.redis事務和腳本

  redis在2.6版本後提供了非常靈活的腳本功能。腳本和事務類似,同樣可以理解為一連串命令的執行,redis會將腳本一口氣串列的執行完。redis腳本比事務更加的強大,事務能完成的任務,腳本也能完成。但相對而言,比起編寫複雜的腳本,redis本身的事務特性是最簡單的。

5.redis事務總結

  redis作為一款非關係型資料庫伺服器,對事務的支持是遠遠比不上傳統的關係型資料庫的。redis事務不支持回滾,對事務ACID特性的支持也不盡如人意。但正因為redis功能的簡單性,redis擁有極高的可用性。所以在實際業務選型時,應該揚長避短,不去過分依賴redis的事務特性,而是充分利用redis的高可用性,對於一些對事務要求很高的場合,轉而使用傳統的關係型資料庫來滿足需求。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Lab 4: Preemptive Multitasking tags: mit 6.828, os 概述 本文是lab4的實驗報告,主要圍繞 進程 相關概念進行介紹。主要將四個知識點: 1. 開啟多處理器。現代處理器一般都是多核的,這樣每個CPU能同時運行不同進程,實現並行。需要用鎖解決多CPU的 ...
  • nginx 日誌切割 PS:nginx日誌切割可以通過兩種方式進行切割,日誌logrotate,腳本 方法一:通過logrotate切割 個人感覺配置麻煩,且結合自己這邊的項目的環境的複雜,所以就不使用這種方式。這裡我也就不寫了 可以參考:https://www.cnblogs.com/ilanni ...
  • 一、命令介紹 touch 命令用於創建空白文件,以及設置文件的時間。 二、實例 我們使用touch 命令創建一個空白文件,名為test.txt touch test.txt 可以看到,使用touch命令創建空白文件的命令 相當簡潔。 假設,我們要繼續創建空白文件test1.txt、test2.txt ...
  • 之前,我寫了使用cmd查看電腦連接過的wifi密碼(二)和使用cmd查看電腦連接過的wifi密碼(一)但其中的功能不完善,在本次的更新中新增了更多的功能,其實2018/10/24 就更新完成了,一直拖到現在主要是為了驗證程式在不同機子上的執行情況併進行修正。 註意本軟體只用於學習和正當途徑,如果有人 ...
  • 本操作系統郵件由來,crontab定時任務執行推送產生。 1.查看有多少封郵件 2.我們直接鍵入23935來訪問這封mail,看看是否是我們所需要的最新郵件。 3. 退出郵件查看 ctrl+z ...
  • 一、yum命令概述: 1、簡介: yum命令時在Fedora和RedHat以及SUSE中基於rpm的軟體包管理器,它可以使系統管理人員交互和自動化地更細與管理RPM軟體包,能夠從指定的伺服器自動下載RPM包並且安裝,可以自動處理依賴性關係,並且一次安裝所有依賴的軟體包,無需繁瑣地一次次下載、安裝。 ...
  • tail 命令從指定點開始將文件寫到標準輸出.使用tail命令的 f選項可以方便的查閱正在改變的日誌文件,tail f filename會把filename里最尾部的內容顯示在屏幕上,並且不斷刷新,使你看到最新的文件內容. 一.命令格式; tail [必要參數] [選擇參數] [文件] 二.命令功能 ...
  • 有以下存儲過程: 有這個表: 調用存儲過程: 結果: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...