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的你操作

相关推荐
数智化管理手记2 小时前
财务大数据怎么管住资金风险?财务大数据和财务数智化到底怎么结合?
大数据·网络·数据库·人工智能·数据挖掘
晓子文集2 小时前
Tushare接口文档:指数成分和权重(index_weight)
大数据·数据库·python·金融·量化投资
吴声子夜歌2 小时前
MongoDB 4.2——入门指南
数据库·mongodb
吴声子夜歌2 小时前
MongoDB 4.x——高可靠
数据库·mongodb
light blue bird2 小时前
组轴式执行引擎 ✅ 多线程调度组装组件
数据库·信息可视化·oracle·桌面端winform·多节点端·gdi图表绘制开发
码农学院2 小时前
Node.js MongoDB构建户外用品GEO优化内容管理平台
数据库·mongodb·node.js
吴声子夜歌2 小时前
MongoDB 4.x——治理经验
数据库·mongodb
黄华SJ520it3 小时前
门店预约系统开发:提升服务行业数字化转型
前端·数据库·系统开发
万事可爱^3 小时前
Claude 新发布的 Opus 5,系统提示语删了 80%,半价还能逼近 Fable 5
android·服务器·数据库·人工智能·claude