Redis_事務操作

13. redis事務操作

13.1事務簡介

原子性(Atomicity)
一致性(Consistency)
隔離性(isolation)
持久性(durabiliby)
ACID

13.2 Redis事務

提供了multi、exec命令來完成

  • 第一步,客戶端使用multi命令顯式地開啟事務
  • 第二步,客戶端把事務中要執行的指令發送給服務器端,例如set 、get 、lpush,這些指令不會立即執行,進入一個隊列中
  • 第三步,客戶端向服務器發送一個命令 exec,來完成事務提交。當服務器端收到這個指令后,實際去執行上一步中的命令隊列.
    multi
    set k1 v1
    set k2 v2
    set k3 v3
    get k1
    exec
    multi
    set k4 v4
    set k5 v5
    discard //取消
    

13.3 Redis的事務處理機制

13.3.1 原子性

第一種情況

  • 在執行exec指令前,客戶端發送操作命令有誤,redis會報錯并記錄這個錯誤。此時,還可以繼續發送命令操作,在執行exec命令之后,redis拒絕執行所有提交的指令,返回事務失敗的結果。(保證了原子性)
    multi
    set k1 v1
    get k1 v1
    set k2 v2
    exec
    整個隊列失敗
    

第二種情況

  • 向服務器發送指令,其中有指令和操作的數據類型不匹配,放入隊列時并沒有報錯。使用lpop指令操作失敗,但get指令成功了。(不能保證原子性)
    multi
    lpop k1 //失敗
    get k1 //成功
    exec
    

第三種情況

  • 在執行事務的exec指令時,redis實例發生了故障,導致事務執行失敗
  • 如果redis開啟了aof日志,可能會有一部分指令被記錄到AOF日志中,需要使用redis-check-aof 去檢查aof文件,將未完成事務操作從aof清除,從而保證原子性

13.3.2 一致性

  • 第一種情況,指令進入隊列時就報錯,整個事務全部被放棄執行,可以保證數據的一致性。
  • 第二種情況,進入隊列時沒有報錯,實際執行時報錯,有錯誤的指令不去執行,正確的指令可以正常執行,可以保證數據的一致性
  • 第三種情況,exec指令時redis實例發生故障,根據RDB和AOF情況來做判斷
    • 如果沒有開啟rdb和aof,數據在重啟后沒有,一致的
    • 如果使用了rdb方式,rdb不會在事務執行的時候去保存數據,數據庫也是一致的
    • 使用aof日志,如果事務隊列操作記錄沒有進入aof,可以保證一致性。如果已加入了一部分,使用redis-check-aof清除事務中已完成的操作,保證事務的一致性

13.3.3 隔離性

提交exec指令去執行事務,分成exec之前和exec之后兩種情況
并發操作在exec指令前,要實現隔離性的保證 ,需要使用watch機制,否則不能保證隔離性
在事務執行前,相當于有一個監控器,在監控key是否已經被修改過了,如果已修改,則放棄事務執行,避免了事務的隔離性被破壞。如果客戶再次執行,此時,沒有其他客戶端去修改數據,則執行成功。
悲觀鎖:synchronized
樂觀鎖:Atomic原子操作
在這里插入圖片描述

使用unwatch取消watch命令對所有key的監控。

13.3.4 持久性

redis內存數據庫,取決于持久化配置模式
不開啟rdb和aof,只當作緩存使用,是不能保證持久性
使用rdb,如果在一個事務執行后,下一次的rdb快照還未執行前,redis實例發生故障了,不能保證持久性
使用aof, 配置選項 everysec、always、no,也不能保證持久性
不管redis采用什么配置模式,都不能保證事務的持久性

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

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

相關文章

前沿分享-通過經皮神經刺激來治療糖尿病神經性疼痛

經皮神經電刺激(PENS)設備用于對糖尿病周圍神經病變引起的慢性、頑固性疼痛進行多次治療。 放在耳朵上的這種可穿戴設備在幾天內持續提供低水平的脈沖電流。 這是一種安全有效的非麻醉性替代治療慢性疼痛的方法。還有一張設備放在糖足上的照片&#xff0…

向量數據庫 Milvus Cloud Partition Key:租戶數量多,單個租戶數據少的三種解決方案

三種解決方案 這個問題提出的時候,Milvus 的最新版本是 2.2.8,我們做個角色互換,在當時站在這個用戶的角度,留在我們面前的選擇有這么幾個: 為每個租戶創建一個 collection 為每個租戶創建一個 partition 創建一個租戶名稱的標量字段 接下來,我們依次分析下這三種方案的可…

《零基礎實踐深度學習》(第2版)學習筆記,(五)深度學習與計算機視覺

文章目錄 1. 計算機視覺概述2. 圖像分類3. 目標檢測 1. 計算機視覺概述 圖像分類 目標檢測 2. 圖像分類 3. 目標檢測

01-C++數據類型

3、基礎類型 3.1、簡單變量 變量的命名 carDrip和cardRip 或boat_sport和boats_port 此外,還有有前綴的命名,使用前綴表示數據類型。常見的前綴有:str(表示字符串)、n(表示整數值)、b(表示…

深入探究QCheckBox的三種狀態及其用法

文章目錄 引言:三種狀態一、未選中狀態(0):二、選中狀態(2):三、部分選中狀態(1): 判斷方法結論: 引言: QCheckBox是Qt框架中常用的復…

html css實現愛心

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>/* 愛心 */.lo…

修改Linux中SSH的端口

文章目錄 修改Linux中SSH的端口Linux中默認的ssh端口關閉SELinux測試新端口 修改Linux中SSH的端口 Linux中默認的ssh端口 使用root用戶操作 修改前先備份ssh_config cp /etc/ssh/sshd_config /etc/ssh/sshd_config_date "%Y%m%d%H%M%S"修改配置文件&#xff0c;找…

結構體的定義與賦值

1、結構體定義 首先定義一個學生結構體&#xff0c;如下所示&#xff1a; struct Student {int num;char name[32];char sex;int age; }; 接著在主函數中對學生進行聲明&#xff0c;如下所示&#xff1a; #include<iostream> using namespace std;struct Student {in…

2023Robocom省賽(本科組)

RC-u1 亞運獎牌榜 題目鏈接&#xff1a;PTA | 程序設計類實驗輔助教學平臺 (pintia.cn) 題目&#xff1a; 2022 年第 19 屆亞運會即將在杭州召開&#xff0c;杭州已經做好準備歡迎全亞洲的觀眾一同參與亞運盛會了&#xff01; 你正在開發一款跟亞運獎牌計算相關的 App。給定…

“深入探究JVM內部結構與工作原理:解析Java虛擬機“

標題&#xff1a;深入探究JVM內部結構與工作原理 摘要&#xff1a;本文將深入探究Java虛擬機&#xff08;JVM&#xff09;的內部結構與工作原理。我們將介紹JVM的基本組成部分&#xff0c;包括類加載器、運行時數據區和執行引擎。同時&#xff0c;我們將通過一個示例代碼來說明…

直接在html中引入Vue.js的cdn來實現一個簡單的上傳圖片組件

摘要 當使用 Vue.js 的 CDN 來實現一個簡單的上傳圖片組件時&#xff0c;你可以利用 Vue 的數據綁定和事件處理能力&#xff0c;結合 HTML 和 CSS&#xff0c;輕松地創建一個交互式的圖片上傳界面。以下是一個示例&#xff1a; 代碼結構 index.html <!DOCTYPE html> &…

LVS集群和分布式

LVS 一.集群和分布式概念 1.1 集群 在計算機領域&#xff0c;集群早在 1960 年就出現&#xff0c;隨著互聯網和計算機相關技術的發展&#xff0c;現在 集群這一技術已經在各大互聯網公司普及。 1.1.1 集群概念 計算機集群指一組通過計算機網絡連接的計算機&#xff0c;它們…

Rust 重載運算符|復數結構的“加減乘除”四則運算

復數 基本概念 復數定義 由實數部分和虛數部分所組成的數&#xff0c;形如a&#xff0b;bi 。 其中a、b為實數&#xff0c;i 為“虛數單位”&#xff0c;i -1&#xff0c;即虛數單位的平方等于-1。 a、b分別叫做復數a&#xff0b;bi的實部和虛部。 當b0時&#xff0c;a&…

前后端分離------后端創建筆記(06)新增接口頁面布局

本文章轉載于【SpringBootVue】全網最簡單但實用的前后端分離項目實戰筆記 - 前端_大菜007的博客-CSDN博客 僅用于學習和討論&#xff0c;如有侵權請聯系 源碼&#xff1a;https://gitee.com/green_vegetables/x-admin-project.git 素材&#xff1a;https://pan.baidu.com/s/…

Kubernetes入門 四、Pod核心

目錄 什么是PodPod與容器不同Pod如何管理多個容器Pod的管理-工作負載K8s中的資源清單創建使用Pod直接創建Pod使用 Deployment 創建Pod 環境變量重啟策略鏡像拉取策略訪問 DNS 的策略資源限制初始化容器臨時容器&#xff08;了解&#xff09; 什么是Pod Pod 是可以在 Kubernete…

Azure添加網絡接口

添加網絡接口的意義 在 Azure 上&#xff0c;為虛擬機添加網絡接口的意義包括以下幾個方面&#xff1a; 擴展網絡帶寬&#xff1a;通過添加多個網絡接口&#xff0c;可以增加虛擬機的網絡帶寬&#xff0c;提高網絡傳輸速度和數據吞吐量。實現網絡隔離&#xff1a;每個網絡接口…

zabbix-6.4 監控 MySQL

目錄 1、rpm安裝zabbix_agentd服務 2、編寫zabbix_agentd.conf文件 3、編寫模板文件 4、創建mysql用戶并賦權限 5、創建.my.cnf文件 6、將規則添加到SELinux策略中 注意&#xff1a; 若模板無法讀取.my.cnf 信息&#xff0c;從而導致監控報錯&#xff0c;可以嘗試修改模…

虛樹

虛樹是用來優化樹形dp的東西&#xff0c;它的轉移是從一些特殊點&#xff0c;向根節點轉移&#xff0c;期間它有用的轉移點比較特殊。通常詢問次數較多&#xff0c;但特殊點總和較少&#xff0c;就可以每次詢問先建虛樹再跑dp。單調棧建虛樹 O ( k l o g n ) O(klogn) O(klogn)…

別人直播的時候怎么錄屏?分享一些錄屏方法

?隨著互聯網的快速發展&#xff0c;直播已經成為人們日常生活中不可或缺的一部分。但是&#xff0c;有時候我們可能會錯過某些重要的直播內容&#xff0c;這時候就需要錄屏來保存和觀看。那么&#xff0c;如何錄屏別人的直播呢&#xff1f;本文將分享一些錄屏方法和技巧&#…

【Python機器學習】實驗11 神經網絡-感知器

文章目錄 人工神經網絡感知機二分類模型算法 1. 基于手寫代碼的感知器模型1.1 數據讀取1.2 構建感知器模型1.3 實例化模型并訓練模型1.4 可視化 2. 基于sklearn的感知器實現2.1 數據獲取與前面相同2.2 導入類庫2.3 實例化感知器2.4 采用數據擬合感知器2.5 可視化 實驗1 將上面數…