• Redis事物


    redis事物定义:

      》Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

      》Redis事务的主要作用就是串联多个命令防止别的命令插队。(redis单线程的,所以不会线程抢占的情况)

      命令队列

      multi 、exec 、discard

      》multi命令开始,后面的命令都会放入命令队列(quenen),但是不会执行,直到执行exec命令,才会顺序执行命令队列中的命令。

      》如果想放弃组队,通过discard命令来通知redis.

    事物的错误处理有两种:

      》第一种命令组队时,报错。在执行时,整租所有的命令都会被取消。

      》第二种是组队时不报错,执行时个别命令出错。则只有报错的命令不会执行,而其他命令正常执行,且不回滚

    WATCH key [key ...]

      》在执行multi之前,先执行watch key.监视一个(或多个)key,如果执行事务之前,key被其他命令改了,那么该事务不能执行。

    UNWATCH key

      》取消监视

      注意:如果在执行 WATCH 命令之后, EXEC 命令或 DISCARD 命令先被执行了的话,那么就不需要再执行 UNWATCH 了

    两种锁机制:

      》悲观锁:当一开始操作(读取、更改)数据时,就锁住该数据不让其他人操作,直到自己不再操作,才会释放锁。

      》乐观锁:操作数据时,不会锁住资源,这样并发性好,但是会有一个版本号,当更新时,也会更新版本号。其他人会与版本号做对比,以确保读到的是最新的数据。

     redis事务的三特性

      》单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

      》没有隔离级别的概念:队列中的命令没有提交之前都不会实际的被执行,因为事务提交前任何指令都不会被实际执行,也就不存在“事务内的查询要看到事务里的更新,在事务外查询不能看到”这个 让人万分头痛的问题 。

      》不保证原子性 :Redis同一个事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚 。

  • 相关阅读:
    深入理解Javascript变量作用域
    phpcms v9取消验证码
    typecho去index.php
    cms与blog汇总
    phpcms修改增加编辑时摘要自动提取的数量
    phpcms后台主菜单不显示
    phpcms sitemaps修改
    phpcms打印数据
    phpcms tag页调用缩略图
    php自动添加相关文章
  • 原文地址:https://www.cnblogs.com/xingrui/p/10164516.html
Copyright © 2020-2023  润新知