• Redis教程14-事务命令使用参考


    1.DISCARD

    DISCARD

    取消事务,放弃执行事务块内的所有命令。

    如果正在使用 WATCH 命令监视某个(或某些) key,那么取消所有监视,等同于执行命令 UNWATCH 。

    可用版本:>= 2.0.0

    时间复杂度:O(1)。

    返回值:总是返回 OK 。

    127.0.0.1:6379> multi
    OK
    127.0.0.1:6379> ping
    QUEUED
    127.0.0.1:6379> set name redis55667788
    QUEUED
    127.0.0.1:6379> discard    // 取消事务中的命令
    OK
    127.0.0.1:6379>

    2.EXEC

    EXEC

    执行所有事务块内的命令。

    假如某个(或某些) key 正处于 WATCH 命令的监视之下,且事务块中有和这个(或这些) key 相关的命令,那么 EXEC 命令只在这个(或这些) key 没有被其他命令所改动的情况下执行并生效,否则该事务被打断(abort)。

    可用版本:>= 1.2.0

    时间复杂度:事务块内所有命令的时间复杂度的总和。

    返回值:

    事务块内所有命令的返回值,按命令执行的先后顺序排列。
    当操作被打断时,返回空值 nil 。
    # 事务被成功执行
    
    redis> MULTI
    OK
    redis> INCR user_id
    QUEUED
    redis> INCR user_id
    QUEUED
    redis> INCR user_id
    QUEUED
    redis> PING
    QUEUED
    redis> EXEC
    1) (integer) 1
    2) (integer) 2
    3) (integer) 3
    4) PONG
    
    
    # 监视 key ,且事务成功执行
    
    redis> WATCH lock lock_times
    OK
    
    redis> MULTI
    OK
    
    redis> SET lock "huangz"
    QUEUED
    
    redis> INCR lock_times
    QUEUED
    
    redis> EXEC
    1) OK
    2) (integer) 1
    
    
    # 监视 key ,且事务被打断
    
    redis> WATCH lock lock_times
    OK
    
    redis> MULTI
    OK
    
    redis> SET lock "joe"        # 就在这时,另一个客户端修改了 lock_times 的值
    QUEUED
    
    redis> INCR lock_times
    QUEUED
    
    redis> EXEC                  # 因为 lock_times 被修改, joe 的事务执行失败
    (nil)

    3.MULTI

    MULTI

    标记一个事务块的开始。

    事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令原子性(atomic)地执行。

    可用版本:>= 1.2.0

    时间复杂度:O(1)。

    返回值:总是返回 OK 。

    redis> MULTI            # 标记事务开始
    OK
    
    redis> INCR user_id     # 多条命令按顺序入队
    QUEUED
    
    redis> INCR user_id
    QUEUED
    
    redis> INCR user_id
    QUEUED
    
    redis> PING
    QUEUED
    
    redis> EXEC             # 执行
    1) (integer) 1
    2) (integer) 2
    3) (integer) 3
    4) PONG

    4.UNWATCH

    UNWATCH

    取消 WATCH 命令对所有 key 的监视。

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

    因为 EXEC 命令会执行事务,因此 WATCH 命令的效果已经产生了;而 DISCARD 命令在取消事务的同时也会取消所有对 key 的监视,因此这两个命令执行之后,就没有必要执行 UNWATCH 了。

    可用版本:>= 2.2.0

    时间复杂度:O(1)

    返回值:总是 OK 。

    redis> WATCH lock lock_times
    OK
    
    redis> UNWATCH
    OK

    5.WATCH

    WATCH key [key ...]

    监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

    可用版本:>= 2.2.0

    时间复杂度:O(1)。

    返回值:总是返回 OK 。

    127.0.0.1:6379> set name redis666    // 设置name
    OK 
    127.0.0.1:6379> watch name    // 监控name
    OK
    127.0.0.1:6379> multi    // 开启事务
    OK
    127.0.0.1:6379> exists name
    QUEUED
    127.0.0.1:6379> get name
    QUEUED
    127.0.0.1:6379> set name redis888    // 这时候另一个客户端将name覆盖赋值为"redis123"
    QUEUED
    127.0.0.1:6379> exec    // 结束事务, 返回nil, 不成功
    (nil)
    127.0.0.1:6379> get name
    "redis123"
    127.0.0.1:6379>
    redis123
  • 相关阅读:
    JAVA-初步认识-第十一章-异常-原理异常对象的抛出throw
    shopex后台上传模板漏洞
    PHP使用1个crontab管理多个crontab任务
    HTML5跨浏览器表单及HTML5表单的渐进增强
    用Opera Mobile调试手机版网页【转】
    mootools里选择器$,$$,$E,$ES等的区别
    Call to undefined function bcscale()
    阿里云服务器数据库配置
    阿里云Mysql重置密码
    window.open窗口关闭后刷新父窗口代码
  • 原文地址:https://www.cnblogs.com/no-celery/p/13733801.html
Copyright © 2020-2023  润新知