我们知道熟悉MySQL的同学,一定了解ACID属性。ACID分别对应四种属性,但是Redis的事务和ACID属性有什么不一样的地方嘛,我们来深入探讨下。
Redis事务和MySQL事务的区别
ACID的本质是保证了事务执行前后对结果的保证,以及数据状态变化的保证。MySQL通过日志、MVCC、隔离级别、锁等机制实现ACID。
但是Redis并不是传统意义上的事务级别,Redis的事务本质是可以一次执行多条命令、并且在这个事务中会序列化执行,按照顺序串行化执行而不会被其他命令插入,不许加塞。
Redis事务原理
正常执行
原子性
上面在正常的情况下,MUTI 和 EXEC 都会被正常执行可以保证原子性。
1.在提交命令的时候,如果命令本身就是错误的
显然执行之后,直接抛出错误,可以保证原子性
2.提交命令时,命令和数据类型不符合,在执行的时候异常
在对key1 进行减1操作的时候执行出错,但是后续的命令却成功了,显然这没有保证原子性。属于一半执行成功,一半执行失败。
在MySQL中,提供了回滚操作,但是在Redis中虽然提供了DISCARD 主动放弃事务,把命令队列清空,起不到数据回滚的作用。
一致性
隔离性
持久性
总结
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。