Redis学习笔记——第19章 事务

第19章 事务

19.1 事务的实现

19.1.1 事务开始

使用multi命令开启一个事务
通过修改客户端的flags字段为REDIS_MULTI

19.1.2 命令入队

当开启事务之后,exec、discard、watch、multi命令立即执行,而其他命令会放入一个队列中,并返回Queued

19.1.3 事务队列

客户端的mstate保存事务队列,事务保存了参数与执行函数,是一个先进先出的队列

19.1.4 执行事务

遍历事务列表并将结果全部返回给客户端(一次性)

19.2 watch命令的实现(乐观锁)

用以在exec之前监视数据库键,当事务修改了这些键时,事务exec失败

19.2.1 使用watch命令监视数据库键

被监视的键保存为一个字典,值为监视这个键的客户端链表

19.2.2 监视机制的触发

当客户端监视了某个键时,若键被修改,则将监听该键的客户端标识改为REDIS_DIRIY_CAS来使其感知

19.2.3 判断事务是否安全

在执行exec命令时,查看标识是否为REDIS_DIRIY_CAS,若是,则不执行任务

19.2.4 一个完整的watch事务执行过程

在一个客户端加了watch,开启事务之后,若其他客户端修改了watch中操作的键之后,会将watch这些键的客户端标识修改为REDIS_DIRIY_CAS,该客户端再执行exec命令便会被拒绝

19.3 事务的ACID属性

19.3.1 原子性

如果在入队期间发现命令错误,则不会执行,但是如果在执行期间发生异常,则不会回滚整个事务,因此不具有原子性

19.3.2 一致性

redis数据库具有一致性,不会因为特殊情况出现导致redis数据库丢失这种特性

19.3.3 隔离性

redis数据库是单线程数据库,则一定具有隔离性

19.3.4 持久性

只有每次执行事务前使用SAVE命令才可以保证事务具有持久性,但是这种做法效率低下,所以可以认为redis数据库不具有持久性

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值