目录
事务
1.MySQL中事务的特性
2.Redis事务与MySQL事务的区别
3.Redis事务操作演示
事务
什么是事务呢?事务的概念其实就是把一系列操作绑定成一组,让这一组操作能够批量执行,不过在MySQL中有复杂的机制能够保证这一组操作执行并且一定能成功执行,否则就一条也执行不了,但是Redis中的事务就没有这么靠谱,它只负责把操作绑在一起,如果其中有执行失败的操作,事务无法自动回滚。
1.MySQL中事务的特性
MySQL中事务具有四大特性(ACID)分别是原子性,一致性,隔离性,持久性。
- 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。
- 一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
- 隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。、
- 持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
MySQL基于事务的隔离性,还延伸出来了三种事务的隔离级别,分别是脏读,不可重复读,幻读从上到下隔离级别越来越高,相应的性能开销也越来越大。
2.Redis事务与MySQL事务的区别
Redis中事务和MySQL事务的区别:
- 弱化的原⼦性: redis 没有 "回滚机制". 只能做到这些操作 "批量执⾏". 不能做到 "⼀个失败就恢复到初始状态".
- 不保证⼀致性: 不涉及 "约束". 也没有回滚. MySQL 的⼀致性体现的是运⾏事务前和运⾏后 , 结果都是合理有效的, 不会出现中间⾮法状态.
- 不需要隔离性: 也没有隔离级别, 因为不会并发执⾏事务 (redis 单线程处理请求) .
- 不需要持久性: 是保存在内存的. 是否开启持久化, 是redis-server自己的事情, 和事务⽆关.
Redis 事务本质上是在服务器上搞了⼀个 "事务队列". 每次客⼾端在事务中进⾏⼀个操作, 都会把命令先发给服务器, 放到 "事务队列" 中(但是并不会立即执行),而是会在真正收到 EXEC 命令之后, 才真正执行队列中的所有操作.
3.Redis事务操作演示
使用multi开启一个事务,执行成功返回OK,并写入一系列操作使用exec执行这些操作。
此时我们可以使用discard命令来放弃当前事务,此时直接清空事务队列,之前的操作都不会正常执行。
- 当开启事务的时候, 如果对 watch 的 key 进⾏修改, 就会记录当前 key 的 "版本号"。 (版本号是个简单的整数, 每次修改都会使版本变⼤. 服务器来维护每个 key 的版本号情况)。
- 在真正提交事务的时候,如果发现当前服务器上的 key 的版本号已经超过了事务开始时的版本号,就会让事务执⾏失败。(事务中的所有操作都不执行)。
在执行事务前我们也可以通过unwatch操作来取消对key的监控。
❤️😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍
🍔我是小皮侠,谢谢大家都能看到这里!!
🦚主页已更新Java基础内容,数据结构基础,数据库,算法
🚕未来会更新Java项目,SpringBoot,Redis以及各种Java路线会用到的技术。
🎃求点赞!求收藏!求评论!求关注!
🤷♀️谢谢大家!!!!!!!