• 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是否开启了数据持久。

  • 相关阅读:
    设计模式(三):装饰模式
    实战pythoninstagram
    设计模式(二):观察者模式
    instagram 的api研究
    设计模式(四):代理模式
    设计模式(五):工厂模式
    qq微博oauth认证记录
    js 处理json数据记录
    17Django高级之Auth
    20Django高级之信号
  • 原文地址:https://www.cnblogs.com/loading4/p/6733250.html
Copyright © 2020-2023  润新知