关于redis:Redis第六章节事务

76次阅读

共计 1434 个字符,预计需要花费 4 分钟才能阅读完成。

目录

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

简介

事务(Transaction),个别是指要做的或所做的事件。在计算机术语中是指拜访并可能更新数据库中各种数据项的一个程序执行单元(unit)。

执行过程

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

特点

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

案例:

  • (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)编译型谬误

    最初执行 exec 命令之后,会执行队列中的命令,队列中命令有失败的,所以最初整个命令都执行失败。
    编译型异样代码有问题,命令有错,事务中所有的命令都不会被执行。
  • (4)运行时谬误

    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"

    如果事务队列存在语法错误,那么执行命令的时候,其余命令是能够失常执行的,谬误命令抛出异样。

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
  • 失常watch

    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"

正文完
 0