zoukankan      html  css  js  c++  java
  • Redis 事务

    一、Redis 事务是什么

    Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:

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

    一个事务从开始到执行会经历以下三个阶段:

    • 开始事务。
    • 命令入队。
    • 执行事务。

    二、Redis Multi 命令

    Redis Multi 命令用于标记一个事务块的开始。

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

    三、Redis Exec 命令

    Redis Exec 命令用于执行所有事务块内的命令。

    三、Redis Watch 命令

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

    事务执行后,Watch 命令失效;也就是说下次事务执行不会监视这个 key 是否被其他命令改动。

    实例:

    # 事务被成功执行
     
    redis 127.0.0.1:6379> MULTI               # 标记开始执行事务
    OK
     
    redis 127.0.0.1:6379> INCR user_id        # 事务中执行的命令
    QUEUED
     
    redis 127.0.0.1:6379> INCR user_id
    QUEUED
     
    redis 127.0.0.1:6379> INCR user_id
    QUEUED
     
    redis 127.0.0.1:6379> PING
    QUEUED
     
    redis 127.0.0.1:6379> EXEC               # 执行事务
    1) (integer) 1
    2) (integer) 2
    3) (integer) 3
    4) PONG
     
     
    # 监视 key ,且事务成功执行
     
    redis 127.0.0.1:6379> WATCH lock lock_times
    OK
     
    redis 127.0.0.1:6379> MULTI
    OK
     
    redis 127.0.0.1:6379> SET lock "huangz"
    QUEUED
     
    redis 127.0.0.1:6379> INCR lock_times
    QUEUED
     
    redis 127.0.0.1:6379> EXEC
    1) OK
    2) (integer) 1
     
     
    # 监视 key ,且事务被打断
     
    redis 127.0.0.1:6379> WATCH lock lock_times
    OK
     
    redis 127.0.0.1:6379> MULTI
    OK
     
    redis 127.0.0.1:6379> SET lock "joe"        # 就在这时,另一个客户端修改了 lock_times 的值
    QUEUED
     
    redis 127.0.0.1:6379> INCR lock_times
    QUEUED
     
    redis 127.0.0.1:6379> EXEC                  # 因为 lock_times 被修改, joe 的事务执行失败
    (nil)

     

     

     

  • 相关阅读:
    Firefly 3288又一次制作android和lubuntu双系统固件
    想做一个完美的健身训练计划,你须要知道什么?
    【LeetCode-面试算法经典-Java实现】【075-Sort Colors (颜色排序)】
    每天进步一点点——Ganglia的Python扩展模块开发
    Unity3D-rigidBody.velocity
    泛型初识
    HDOJ 5418 Victor and World 状压DP
    UIPopoverController具体解释
    怎样提升站点的性能?
    PHP操作MongoDB数据库具体样例介绍(增、删、改、查) (六)
  • 原文地址:https://www.cnblogs.com/DillGao/p/8496184.html
Copyright © 2011-2022 走看看