zoukankan      html  css  js  c++  java
  • redis事务和乐观锁

    1 MULTI/EXEC

    执行本事务。

    MULTI

    set foo bar

    get foo

    set foo hello

    EXEC

    在EXEC执行前,三条命令都放入队列中,然后EXEC触发执行。没有回滚,如果中间有命令失败,已经执行的命令不回滚,还没有执行的命令继续执行完。

    2 MULTI/DISCARD

    放弃本事务,事务中的命令一个也不会执行。

    MULTI

    set foo bar

    get foo

    set foo hello

    DISCARD

    三个命令都不会执行。

    3 乐观锁

    WATCH foo

    MULTI

    set foo bar

    EXEC

    如果在事务执行前,foo key有改动的话,事务停止执行。如果没有改动,继续执行。

    因为redis是单线程的,实现起来比较简单,执行watch命令的时候,redis server会把该key放入watch列表中。

    某个client在执行set操作的时候,如果修改了某个key,会通知所有watch该key的client,该key已经是dirty的了。

    在exec执行的时候,会先去看是否有key被修改了,如果有的话,就丢弃本次事务,否则继续执行。

    4 为什么redis不支持回滚

    redis认为不会出现在生产环境中,不回滚更简单。

  • 相关阅读:
    发起qq临时会话
    easyUI-textbox回车获取不到正确的textbox值问题
    Linq in条件查询
    常用js-API
    MVC4不支持EF6解决方案 && Nuget控制台操作说明
    JS报表打印分页CSS
    关于phpinfo页面展开的渗透
    基于phpmyadmin的攻击
    upload_labs靶场
    文件上传漏洞
  • 原文地址:https://www.cnblogs.com/hustdc/p/8891058.html
Copyright © 2011-2022 走看看