02. Redis 事務

文章目錄

  • Redis 事務
    • 執行事務
    • 放棄事務
    • 編譯性異常
    • 運行時異常

Redis 事務

Redis 單條明令是原子性的,但Redis事務不保證原子性。

事務的本質就是:一組命令一起執行!一個事務中的所有命令都會被序列化,在事務執行過程中,會按照順序執行!

一次性、順序性、排他性。

Redis事務沒有隔離級別的概念。 所有的命令在事務中,并沒有被直接執行!只有在發起執行命令的時候才會執行!

原子性:要么一起成功,要么一起失敗

執行事務

Redis 事務:

  • 開啟事務(multi);
  • 命令入隊;
  • 執行事務(exec)。
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)> get k2
QUEUED
127.0.0.1:6379(TX)> set k3 v3
QUEUED
127.0.0.1:6379(TX)> exec # 執行事務
1) OK
2) OK
3) "v2"
4) OK

放棄事務

放棄事務后,隊列中的命令都沒有執行!

127.0.0.1:6379> multi # 開啟事務
OK
127.0.0.1:6379(TX)> set k1 v1 
QUEUED
127.0.0.1:6379(TX)> set k4 v4
QUEUED
127.0.0.1:6379(TX)> set k1 v11
QUEUED
127.0.0.1:6379(TX)> discard # 放棄事務
OK
127.0.0.1:6379> get k4
(nil)
127.0.0.1:6379> get k1
"v1"

編譯性異常

代碼有問題,命令有錯!事務中所有的命令都不會執行!

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)> getset k3 # 錯誤的命令,客戶端會給出錯誤提示,但不會斷開事務
(error) ERR wrong number of arguments for 'getset' command
127.0.0.1:6379(TX)> 
127.0.0.1:6379(TX)> set k4 v4 
QUEUED
127.0.0.1:6379(TX)> set k5 v5
QUEUED
127.0.0.1:6379(TX)> exec # 執行會報錯
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> get k5 # 事務中的命令都沒有執行
(nil)

運行時異常

如果事務隊列中存在語法性錯誤,那么執行命令的時候,其他命令是可以執行的!錯誤命令會拋出異常!(所以說沒有原子性)

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set k1 v1 
OK
127.0.0.1:6379> incr k1 # 這是一條有問題的命令(執行時會報錯)
(error) ERR value is not an integer or out of range
127.0.0.1:6379> 
127.0.0.1:6379> multi 
OK
127.0.0.1:6379(TX)> set k2 v2
QUEUED
127.0.0.1:6379(TX)> incr k1 # 錯誤命令入隊
QUEUED
127.0.0.1:6379(TX)> set k3 v3
QUEUED
127.0.0.1:6379(TX)> set k4 v4
QUEUED
127.0.0.1:6379(TX)> exec # 有錯誤的命令報錯了,其他命令成功了
1) OK
2) (error) ERR value is not an integer or out of range
3) OK
4) OK

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/13796.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13796.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/13796.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2024-05-19 問AI: 大語言模型的BPE方向是什么意思?

文心一言 大語言模型的上下文中,BPE(Byte-Pair Encoding)是一種常用的子詞單元(subword unit)編碼方法,尤其在處理自然語言處理任務時。這種方法的主要目的是解決自然語言中的詞匯表大小問題,特…

mock.js和apifox模擬接口的能力

mock.js 和 Apifox 都是前端開發中常用的工具,用于模擬后端接口和數據。下面是它們的主要特點和模擬接口的能力的比較: mock.js mock.js 是一個用于生成隨機數據的 JavaScript 庫。它允許你定義數據模板,并生成模擬數據。mock.js 主要用于前…

VSCode下STM32開發環境搭建

VSCode下STM32開發環境搭建 需要的軟件 make-3.81 https://udomain.dl.sourceforge.net/project/gnuwin32/make/3.81/make-3.81.exe arm-none-eabi-gcc https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads https://links.jianshu.com/go?tohttps%3A%2F%…

RH850F1KM-S4-100Pin_ R7F7016453AFP MCAL Gpt 配置

1、Gpt組件包含的子配置項 GptDriverConfigurationGptDemEventParameterRefsGptConfigurationOfOptApiServicesGptChannelConfigSet2、GptDriverConfiguration 2.1、GptAlreadyInitDetCheck 該參數啟用/禁用Gpt_Init API中的GPT_E_ALREADY_INITIALIZED Det檢查。 true:開啟Gpt_…

Django5+React18前后端分離開發實戰13 使用React創建前端項目

先將nodejs的版本切換到18: 接著,創建項目: npx create-react-app frontend接著,使用webstorm打開這個剛創建的項目: 添加一個npm run start的配置: 通過start啟動服務: 瀏覽器訪問&…

機器學習之決策樹算法

使用決策樹訓練紅酒數據集 完整代碼: import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import ListedColormap from sklearn import tree, datasets from sklearn.model_selection import train_test_split# 準備數據,這里…

【云原生】Kubernetes 核心概念

什么是 Kubernetes Kubernetes,從官方網站上可以看到,它是一個工業級的容器編排平臺。Kubernetes 這個單詞是希臘語,它的中文翻譯是“舵手”或者“飛行員”。在一些常見的資料中也會看到“ks”這個詞,也就是“k8s”,它…

科大訊飛筆試題---刪除數字

1、 題目描述: 給定一個長度為 n 的數組,數組元素為 a1, a2, . . , an,每次能刪除任意 a 的任意一位,求將所有數字變成 0 最少需要幾步。例如 103 若刪除第 1 位則變成 3; 若刪除第 2 位則變成13; 若刪除第 3 位則變成 10。 輸入…

AWS容器之Amazon ECS

Amazon Elastic Container Service(Amazon ECS)是亞馬遜提供的一種完全托管的容器編排服務,用于在云中運行、擴展和管理Docker容器化的應用程序。可以理解為Docker在云中對應的服務就是ECS。

c語言如何將一個文本內容復制到另外一個文本里

c語言如果要把一個文本文件的文件復制到另外一個文件里&#xff0c;代碼如下 #include<stdio.h>int main() {FILE *fp1,*fp2;char a;fp1fopen("D://cyy//aaa.txt","r");fp2fopen("ccc.cpu","w");while(a!EOF){afgetc(fp1);fput…

linux:切分大文件

文章目錄 1. 前言2. 用法3. 例子 1. 前言 如果傳輸、存儲過程中出現大文件&#xff0c;希望切分成小文件。在 Linux 中&#xff0c;可以使用多種工具來切分大文件&#xff0c;最常用的是 split 命令。split 命令可以將一個大文件按照指定大小切分成多個小文件。 2. 用法 spl…

ImageMagick入門教程(免費圖片格式轉換)

起因是因為我不會圖片轉換,且發現很多圖片轉換都要錢,尤其是pdf轉jpg,于是我就是找到了這個包,自己處理.當然包時不會導的,所以只能用它提供的命令了. 準備工作 下載imagemagick:ImageMagick – Download 我下載的這個,傻瓜式安裝就行,把所有勾勾都勾上,然后要記住安裝路徑,然…

一文讀懂RDMA: Remote Direct Memory Access(遠程直接內存訪問)

目錄 ?編輯 引言 一、RDMA的基本原理 二、RDMA的主要特點 三、RDMA的編程接口 四、RDMA的代碼演示 服務器端代碼&#xff1a; 客戶端代碼&#xff1a; 五、總結 引言 RDMA&#xff0c;全稱Remote Direct Memory Access&#xff0c;即遠程直接內存訪問&#xff0c;是…

客戶機/服務器交互模式

目錄 概述 網絡應用軟件的地位和功能 C/S 模式的特性 容易混淆的術語 C/S 模式的通信過程 網絡協議與 C/S 模式的關系 錯綜復雜的 C/S 交互 總結 概述 客戶機/服務器&#xff08;Client/Server&#xff0c;簡稱 C/S&#xff09;交互模式是一種常見的網絡應用軟件架構&a…

【ChatGPT】 Microsoft Edge 瀏覽器擴展使用 GPT

【ChatGPT】添加 Microsoft Edge 瀏覽器插件免費使用 GPT 文章目錄 準備工作添加擴展注意事項 使用 ChatGPT 可以更高效的搜索到想要的內容&#xff0c;有效節約在搜索引擎中排查正確信息的時間。 準備工作 準備一臺可上網的電腦電腦上安裝有 Windows 自帶的 Microsoft Edge …

二.常見算法--貪心算法

&#xff08;1&#xff09;單源點最短路徑問題 問題描述&#xff1a; 給定一個圖&#xff0c;任取其中一個節點為固定的起點&#xff0c;求從起點到任意節點的最短路徑距離。 例如&#xff1a; 思路與關鍵點&#xff1a; 以下代碼中涉及到宏INT_MAX,存在于<limits.h>中…

python+selenium - UI自動框架之封裝查找元素

單一的元素定位方法不能滿足所有元素的定位&#xff0c;可以根據每個元素的特點來找到合適的方法&#xff0c;可以參考下圖的方法&#xff1a; elementFind.py from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_con…

Vue filter實戰詳解

在 Vue.js 中&#xff0c;filter 是一種用于在模板中對數據進行格式化的功能。它可以用來對數據進行處理、過濾或格式化&#xff0c;然后在模板中直接使用。 filter 是一種全局的 Vue 實例方法&#xff0c;可以在任何組件的模板中使用。 1.定義全局過濾器&#xff1a; 在 Vue…

InnoDB如何解決幻讀的

InnoDB 使用一種稱為 Next-Key Locking 的鎖機制來解決幻讀問題。幻讀發生在一個事務在讀取某個范圍內的記錄時&#xff0c;另一個事務在這個范圍內插入新的記錄。InnoDB 的 Next-Key Locking 結合了行鎖&#xff08;Row Lock&#xff09;和間隙鎖&#xff08;Gap Lock&#xf…

MavLinK協議

由于在公司需要使用這個&#xff0c;我就寫一個文章用于入門級別 簡單介紹 MAVSDK是PX4開源團隊貢獻的基于mavlink通信協議的用于無人機應用開發的SDK&#xff0c;其可以部署在Windows、Linux、Android等多種平臺&#xff0c;并且支持多種語言如c/c、python、Java等。 在官網…