学习笔记 -- redis的事务机制(五)

redis系列文章目录

  1. redis的基本使用与介绍(一)
  2. redis的常用数据类型(二)
  3. redis的常用数据类型(三)
  4. redis的常用数据类型(四)
  5. redis的事务机制(五)

前言

redis是异步单线程执行,也就是一个线程对应所有的客户端。哪个客户端上传了命令,线程就会执行,所以并不能保证一个客户端的多个命令,不会被其它其它客户端的命令插队,通过事务机制可以实现批处理某一个客户端所有命令执行完在执行下一个客户端的命令。

一、redits的事务

  • 目前不具备数据的原子性。
  • 指当前客户端的开启的事务
  • redis不满足数据库的ACID属性
    • 原子性(atomicity):一个事务要么全部提交成功,要么全部失败回滚,不能只执行其中的一部分操作,这就是事务的原子性
    • 一致性(consistency):一个事务在执行之前和执行之后,数据库都必须处于一致性状态。类似one by one 效果,不会给其它事务打断。
    • 隔离性(isolation):一个事务的执行不能不被其他事务干扰。不同的事务并发操作相同的数据时,每个事务都有各自完成的数据空间,即一个事务内部的操作及使用的数据对其他并发事务时隔离的,并发执行的各个事务之间不能相互干扰
    • 持久性(durability):一旦事务提交,那么它对数据库中的对应数据的状态的变更就会永久保存到数据库中
属性redismysql
原子性noyes
一致性yesyes
隔离性yesyes
持久性性NoYes

二、开启事务

redis > MULTI

三、redis事务的一致性

为了保证事务的一致性,在开启事务之前必须要用watch命名监视要操作的记录。如果被监视的数据被其它客户端修改了,当前正在执行的事务会给自动关闭。

监视数据

redis > WATCH key1 key2

开启事务后的所有操作都不会立即执行,只有执行EXEC命令的时候才会批处理执行,如果这期间有其它客户端修改了记录,当前的事务会被自动关闭

redis > INCR num
redis > RPUSH user 9502
redis > EXEC

四、关闭事务

  • Redis并没有事务的回滚机制,所以并不能保证原子性
  • 事务在没有提交执行前,即没有执行EXEC前,是可以取消事务的。如果事务已经提交执行,就无法取消了
redis > MULTI
redis > .....
redis > DISCARD

五、总结

  • 学习了Redis事务机制的原理
  • 掌握管理Redis事务的命令
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值