Redis学习笔记(五) Redis的事务

Redis的事务定义

  • Redis事务是一个单独的隔离操做:事务中的全部命令都会序列化、按顺序地执行。事务在执行的过程当中,不会被其余客户端发送来的命令请求所打断。
  • Redis事务的主要做用就是串联多个命令防止别的命令插队

简单来讲,redis的事务就是将多个事务串联起来,统一交给服务器执行,统一返回结果redis

 

Multi(开启事务)、Exec(执行事务)、discard(取消事务)

  1. 从输入Multi命令开始,输入的命令都会依次进入命令队列中,但不会执行,至到输入Exec后,Redis会将以前的命令队列中的命令依次执行。
  2. 组队的过程当中能够经过discard来放弃组队。

事务中的错误处理

  1. 组队中某个命令出现了报告错误,执行时整个的全部队列会都会被取消。

2.若是执行阶段某个命令报出了错误,则只有报错的命令不会被执行,而其余的命令都会执行,不会回滚数据库

事务冲突问题

  • Ø三个请求
    •     一个请求想给金额减8000
    •     一个请求想给金额减5000
    •     一个请求想给金额减1000

经过事务解决问题服务器

悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,因此每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了不少这种锁机制,好比行锁,表锁等,读锁,写锁等,都是在作操做以前先上锁spa

乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,因此不会上锁,可是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可使用版本号等机制。乐观锁适用于多读的应用类型,这样能够提升吞吐量。Redis就是利用这种check-and-set机制实现事务的。blog

Redis事务的使用

WATCH key[key….]

unwatch

取消 WATCH 命令对全部 key 的监视。若是在执行 WATCH 命令以后, EXEC 命令或 DISCARD 命令先被执行了的话,那么就不须要再执行 UNWATCH 了。队列

三特性

  • 单独的隔离操做

事务中的全部命令都会序列化、按顺序地执行。事务在执行的过程当中,不会被其余客户端发送来的命令请求所打断。事务

  • 没有隔离级别的概念

队列中的命令没有提交以前都不会实际的被执行,由于事务提交前任何指令都不会被实际执行,也就不存在“事务内的查询要看到事务里的更新,在事务外查询不能看到”这个让人万分头痛的问题 序列化

  • 不保证原子性

Redis同一个事务中若是有一条命令执行失败,其后的命令仍然会被执行,没有回滚请求

相关文章
相关标签/搜索