redis与mysql事务区别

5320dbc83402492e9eae8f7715513c47.jpgmysql事务具有原子性,隔离性,一致性的特点。

 

 

redis提供multi, exec,watch来支持事务:

 

原子性,一致性:

 

redis保证在multi,exec之间的语句作为一个整体执行,redis在exec后,是无法回滚的,会出现部分成功,部分失败情况。

 

隔离性(mysql默认可重复读:事务中多次读取同一数据是一致的):

 

redis的事务类似mysql的串行化隔离界别,执行期间不会乱入其他语句。redis在事务使用乐观锁。

 

redis通过watch来监测数据,在执行exec前,监测的数据被其他人更改会抛出错误,取消执行。而exec执行时,redis保证不会插入其他人语句来实现隔离。(可以预见到此机制如果事务中包裹过多的执行长指令,可能导致长时间阻塞其他人)

 

mysql的事务默认可重复读级别,串行化隔离级别可以防止幻读,由于redis事务中事务中查询指令无效,故不存在这类问题,mysql事务中可以有其他人的语句乱入,mysql通过加锁方式,保证被锁的资源不会被其他人存取,保证事务全程可重复读。

 

(比如mysql通过select for update对读取的数据行进行加锁,可以防止事务提交前数据被其他人修改,而对于读,允许其他人的select,但是其他人的select for update 则不允许(这种方式不会长时间挂起其他客户端,但是又会有锁?))

 

锁方式:

 

redis使用的是乐观锁方式,这种方式允许exec前修改,这时会触发异常通知。mysql的悲观锁,会锁住资源,其他客户端不能修改数据,直到事务结束释放锁。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RedisMySQL是两种不同类型的数据库,它们在事务处理方面有一些区别。 1. ACID特性:MySQL是一个关系型数据库,支持ACID(原子性、一致性、隔离性、持久性)事务。这意味着MySQL事务具有原子性,要么全部执行成功,要么全部回滚,保证数据的一致性和隔离性。而Redis是一个键值存储数据库,并不完全支持ACID特性。Redis事务是一系列命令的原子性执行,但在事务执行期间,其他客户端发送的命令可能会被插入到事务之间执行,这会导致Redis事务不满足隔离性。 2. 锁机制:MySQL事务中使用锁机制来控制并发访问和保证数据的一致性。通过行级锁或表级锁来避免多个事务同时修改相同的数据。而Redis并不提供像MySQL那样的锁机制,因为Redis是单线程的,通过事件循环来处理请求。在Redis中,可以使用乐观锁或者分布式锁来实现类似的并发控制。 3. 数据持久化:MySQL将数据持久化存储在硬盘上,以确保数据在系统故障或重启后的可靠性。而Redis默认将数据存储在内存中,通过周期性地将数据写入磁盘进行持久化。但Redis也提供了持久化选项,可以将数据以快照(RDB)或日志(AOF)的方式写入磁盘。 总的来说,MySQL是一个完整的关系型数据库管理系统,支持ACID事务和复杂的查询操作。而Redis则是一个内存数据库,更适合于高速读写和缓存等场景,并提供了一些简单的事务支持。在选择使用哪种数据库的事务处理时,需要根据具体的业务需求和性能要求进行权衡和选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值