12.Redis 事务有何意义?

Redis事务通常会使用MULTI,EXEC,WATCH,DISCARD,UNWATCH,WATCH key [key ...]等命令来完成, Redis实现事务实现的机制与常见的关系型数据库事务特征总结如下。

BD与Redis事务差异
异同BD事务redis事务
相同点事务在提交前不可见
不同点1.redis不支持回滚  2.redis事务执行期间不会锁定待修改key,其他非事务修改可以修改此key  3.非ACID标准

Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:

  • 批量操作在发送 EXEC 命令前被放入队列缓存。
  • 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
  • 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中【但是非事务修改可以修改此key】。


一个事务从开始到执行会经历以下三个阶段:

  • 开始事务
  • 命令入队
  • 执行事务

Redis 事务命令

命令描述
DISCARD取消事务,放弃执行事务块内的所有命令
EXEC执行所有事务块内的命令
MULTI标记一个事务块的开始
UNWATCH取消 WATCH 命令对所有 key 的监视。【redis 默认不监视key】
WATCH key [key ...]监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

redis事务执行流程

redis > MULTI #切换redis为事务态
OK

redis > SET name dzc #事务态可以执行多个命令之一
QUEUED

redis > SET age 18 #事务态可以执行多个命令之一
QUEUED

redis > EXEC #执行事务
1) ok
2) dzc
3) 18

Redis事务的ACID特性讨论

  • 原子性[不支持]

         定义:事务操作要么全部执行,要么都不执行。 原子性关注点 是最终状态不存在部分成功或者失败。

         Redis:队列中上下执行失败相互不受影响,且不会回滚不满足原子性要求。

  • 一致性[支持]

          定义: 保证数据库一致性是指当事务完成时,必须使所有数据都具有一致的状态。     一致性关注点 一致性关注数据的可见性,中间状态的数据对外部不可见,只有最初状态和最终状态的数据对外可见。   

         Redis:Redis事务执行期间只有提交状态数据对外可见。

  • 隔离性[争议支持]

           定义:事务执行期间各事务不相互影响串行执行。

          Redis:Redis执行期间别的事务不会插入事务执行命令序列中是串行执行,但是执行中db通过锁定行完成隔离,而redis不会锁定key非事务命令依然可以修改删除key,导致结果看起来并不完全支持隔离性。

  • 持久性[支持]

         定义:事务执行完毕结果被永久的存储在磁盘中。

         Redis:Redis持久性取决于redis持久化模式,Redis有能力支持持久性。

总结:

    redis事务其实就是一个最终一致性的柔性事务,功能支持比较弱。由于redis事务不会锁定待更新的资源,redis在事务状态与非事务状态修改中查询结果比较混乱。使用场景可以在金融等对结果比较敏感的场景多一层保障,毕竟有这个柔性事务比没有强,但是也可以通过其他设计保证redis的数据最终一致性。

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值