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

相关推荐
weixin_5112552112 小时前
MySQL升级记录
数据库·mysql
程序猿乐锅13 小时前
【黑马点评 | 第八篇】Redisson分布式锁
java·数据库·spring boot·redis·分布式·spring·缓存
Leo.yuan14 小时前
2026年本地化Data Agent优质厂商盘点:哪些产品更适合企业生产环境
大数据·数据库·人工智能
做运维的阿瑞14 小时前
数据库增删改的安全写法
数据库·sql·mysql
程序边界14 小时前
迁移评估不再拍脑袋,这个数据迁移工具的量化报告把我救了(上)
数据库
阿狗童鞋15 小时前
Redis实战指南
数据库·redis·缓存
frjc16 小时前
数据库选型:如何从众多数据库中选出最理想的那一个
redis·mysql·clickhouse·elasticsearch
lupai16 小时前
维修保养记录精准版 API 对接实战指南
数据库·python
panpan161918 小时前
Redis命令大全
redis
2601_9521963619 小时前
计算机科学与技术专业应届生投商业分析岗,需要哪些额外能力?
数据库·oracle