什么是事务呢?事务的概念其实就是把一系列操作绑定成一组,让这一组操作能够批量执行,不过在MySQL中有复杂的机制能够保证这一组操作执行并且一定能成功执行,否则就一条也执行不了,但是Redis中的事务就没有这么靠谱,它只负责把操作绑在一起,如果其中有执行失败的操作,事务无法自动回滚。
MySQL中事务具有四大特性(ACID)分别是原子性,一致性,隔离性,持久性。
MySQL基于事务的隔离性,还延伸出来了三种事务的隔离级别,分别是脏读,不可重复读,幻读从上到下隔离级别越来越高,相应的性能开销也越来越大。
Redis中事务和MySQL事务的区别:
Redis 事务本质上是在服务器上搞了⼀个 "事务队列". 每次客⼾端在事务中进⾏⼀个操作, 都会把命令先发给服务器, 放到 "事务队列" 中(但是并不会立即执行),而是会在真正收到 EXEC 命令之后, 才真正执行队列中的所有操作.
使用multi开启一个事务,执行成功返回OK,并写入一系列操作使用exec执行这些操作。
每次添加⼀个操作,都会提示 "QUEUED",说明命令已经进⼊客⼾端的队列了。真正执行 EXEC 的时候,客⼾端才会真正把上述操作发送给服务器。此时就可以获取到上述 key 的值了。
倘若出现下列情况我们在队列中加入了一个非法语句,这时这个事务操作便无法正常执行操作。
此时我们可以使用discard命令来放弃当前事务,此时直接清空事务队列,之前的操作都不会正常执行。
在执⾏事务的时候,如果某个事务中修改的值,被别的客⼾端修改了,此时就容易出现数据不⼀致的问题。这时Redis为我们提供了watch操作,在执行multi操作之前执行watch key。
在执行事务前我们也可以通过unwatch操作来取消对key的监控。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有