Redis-第六章节-事务

目录

  • 简介
  • 执行过程
  • 特色
  • 案例
  • watch

简介

事务(Transaction),通常是指要作的或所作的事情。在计算机术语中是指访问并可能更新数据库中各类数据项的一个程序执行单元(unit)。java

执行过程

开始事务 -> 命令入队 -> 执行事务。redis

特色

① 批量操做在发送 exec 命令前被放入队列缓存。
② 收到exec命令后进入事务执行,事务中任意命令执行失败,其他的命令依然会被执行。
③ 在事务的执行过程当中,其余客户端提交的命令请求不会插入到事务执行命令的序列中。shell

案例:

  • (1)正常执行数据库

    localhost:6379> multi
      OK
      localhost:6379> set a 1111
      QUEUED
      localhost:6379> set b 2222
      QUEUED
      localhost:6379> set c 3333
      QUEUED
      localhost:6379> set d 4444
      QUEUED
      localhost:6379> exec
      1) OK
      2) OK
      3) OK
      4) OK
  • (2)取消事务缓存

    localhost:6379> multi
      OK
      localhost:6379> set e 55555
      QUEUED
      localhost:6379> set f 66666
      QUEUED
      localhost:6379> discard
      OK
      localhost:6379> exec
      (error) ERR EXEC without MULTI
  • (3)编译型错误
    redis-error
    最后执行exec命令以后,会执行队列中的命令,队列中命令有失败的,因此最后整个命令都执行失败。
    编译型异常代码有问题,命令有错,事务中全部的命令都不会被执行。
  • (4)运行时错误spa

    localhost:6379> set a qqqq
        OK
        localhost:6379> multi
        OK
        localhost:6379> incr a
        QUEUED
        localhost:6379> set b 1111
        QUEUED
        localhost:6379> set c 2222
        QUEUED
        localhost:6379> set d 3333
        QUEUED
        localhost:6379> exec
        1) (error) ERR value is not an integer or out of range
        2) OK
        3) OK
        4) OK
        localhost:6379> keys *
        1) "a"
        2) "c"
        3) "b"
        4) "d"

    若是事务队列存在语法错误,那么执行命令的时候,其余命令是能够正常执行的,错误命令抛出异常。code

watch

Watch 命令用于监视一个(或多个) key ,若是在事务执行以前这个(或这些) key 被其余命令所改动,那么事务将被打断。队列

  • 监控a时,a被修改事务

    //客户端1
        localhost:6379> set a 1111
        OK
        localhost:6379> WATCH a
        OK
        localhost:6379> MULTI
        OK
        localhost:6379> set a 2222
        QUEUED
        localhost:6379> exec
        (nil)
    
      //客户端2
        127.0.0.1:6379> set a 567
        OK
  • 正常watchrem

    localhost:6379> set a 1111
      OK
      localhost:6379> WATCH a
      OK
      localhost:6379> MULTI
      OK
      localhost:6379> set b 222
      QUEUED
      localhost:6379> set c 333
      QUEUED
      localhost:6379> set d 444
      QUEUED
      localhost:6379> exec
      1) OK
      2) OK
      3) OK
      localhost:6379> keys *
      1) "a"
      2) "c"
      3) "b"
      4) "d"
相关文章
相关标签/搜索