Redis事务

1. 什么是事务

Redis的事务和MySQL的事务概念是类似的,都是把一系列操作绑定成一组,让中一组能够批量执行

Redis事务与MySQL事务的区别:

  • 弱化的原子性:Redis没有"回滚机制",只能做到这些操作"批量执行",不能保证全部成执行
  • 不保证一致性:不涉及"约束",也没有回滚,事务执行过程中如果某个操作出现失败,就可能引起不一致的情况
  • 不具备持久性:Redis本身是内存数据库,数据是存储在内存中的
  • 不涉及隔离性:Redis是单线程模型的服务器程序,所有的请求都是"串行"的

Redsi的事务为什么这么简单?

为了保证自己访问速度快的特性,MySQL的事务在背后付出了很多的代价(空间上要花费更多的空间来存储数据,时间上也要更大的执行开销)


Redis事务的主要意义就是为了"打包",避免其他客户端的命令插队

本质上是在服务器上搞了一个"事务队列",每次客户端在事务中进行一个操作,都会把命令先发送到服务器,放到"事务队列"中(不会立即执行)

在收到EXEC命令才会真正执行队列中的所有操作

2. 事务操作

MUTI

开启一个事务,执行成功返回OK

每次添加一个操作,都会提示"QUEUED",说明命令已经进入客户端的队列了

EXEC

真正执行事务

DISCARD

放弃当前事务,此时清空事务队列,之前的操作都不会真正执行

WATCH

在执行事务的时候,如果某个事务中修改的值被别的客户端修改了,此时就容易出现数据不一致的问题

当开启事务的时候,如果对watch的key进行修改,就会记录当前key的"版本号"(版本号是个简单的整数,每次修改都会使版本变大,服务器来维护每个key的版本号情况)

在真正提交事务的时候,如果发现当前服务器上的key的版本号已经超过了事务开始时的版本,就会让事务执行失败(事务中所有的操作都不执行)


客户端1:

客户端2:

执行事务:

UNWATCH

取消对key的监听

相当于WATCH的你操作

相关推荐
梁辰兴20 分钟前
软件工程:数据结构设计
数据库·软件工程·设计原则·设计方法·梁辰兴·数据库结构设计·数据库结构类型
AC赳赳老秦40 分钟前
风控岗应用:OpenClaw 采集公开司法与经营异常数据,自动生成企业风险评估报告
大数据·c语言·数据库·人工智能·python·php·openclaw
灯澜忆梦1 小时前
【MySQL18】进阶篇 | MySQL管理
数据库·mysql
zcmodeltech2 小时前
智能制造教学实训沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的工业机器人-智慧工厂-数字孪生全场景联动方案
数据库·stm32·嵌入式硬件·机器人·制造·多分类
AI多Agent协作实战派2 小时前
AI多Agent协作系统实战(四十):AI说“没有错误“,系统判了“测试失败“——一个正则的误判
数据库·人工智能
隔窗听雨眠3 小时前
OceanBase接入DeepSeek:数据库与AI的深度融合如何改写企业数据规则
数据库·人工智能·oceanbase
playboy1343 小时前
工作室 NAS 存储故障-办公室所有数据无法访问怎么办
数据库
byxdaz4 小时前
jeston平台交叉编译Poppler库与预览pdf文件
数据库
SilicoCode4 小时前
江科大STM32入门:FLASH闪存详解——从结构原理到读写保护
数据库·mongodb
谷哥的小弟4 小时前
腾讯云服务器安装Redis Stack图文教程
服务器·redis·腾讯云·redis stack