Redis事务

Redis事务简述

  在Redis中,涉及到事务的操作有五个命令:MULTI、EXEC、DISCARD、WATCH、UNWATCH。其事务的使用步骤如下:

  1. 使用MULTI开启事务
  2. 提交命令到Redis队列中
  3. EXEC提交事务或DISCARD丢弃事务

  其中WATCH是用来监视某个键的,在MULTI前进行使用,当监视的键值发生改变时,事务将提交失败,如果提交时与开启事务前的值相同,则提交成功。UNWATCH则用来取消监视。WATCH本质是实现乐观锁。

与关系型数据库事务的比较

  相比大多数关系型数据库的事务,Redis与它们存在较大的差异。

  Redis实现事务的原理是将在事务内部的所有命令先存在Redis命令队列中,待使用EXEC提交事务时才对执行队列中的所有命令;而关系型数据库不同,打开事务后执行sql语句也会得到结果。

  Redis事务中不存在回滚,但是可以通过DISCARD来舍弃事务,这是因为Redis事务中的命令是存在于队列中未执行而等待EXEC后一次执行全部的。

  Redis事务中提供的锁为乐观锁,使用不当反而造成性能问题。

Redis事务的ACID

  1. 原子性

    Redis单个命令是原子性的,而对于事务,Redis事务中所有命令存在队列中,当执行EXEC时才将里面的命令一次性执行,这个过程不可被中断,使得事务内的所有命令都成为最小单位。原子性保证了事务要么全部成功运行,要么全部失败。以下有两个例子:

    第一种情况事务全部执行失败,第二种执行了一半。

  2. 一致性

    通过WATCH以及编程中正确的命令可实现一致性。

  3. 隔离性

    由于Redis是单线程,在开启事务后,事务执行时不会被其他命令中断,所以事务之间不影响,所以满足隔离性。

  4. 持久性

    这取决于Redis是否开启了数据持久。

原文地址:https://www.cnblogs.com/loading4/p/6733250.html