美文网首页
Redis基础(2)——事物

Redis基础(2)——事物

作者: nailding | 来源:发表于2016-07-03 19:34 被阅读0次

    Redis事物


    redis中的事物(transaction)是一组命令的集合。事物同命令都是redis的最小执行单位。一个事物中的命令要么都被执行要么都不被执行。事物的应用最常见的例子就是转账,A出账,B入账,要么全执行,要么都不被执行。

    事物的原理是先将属于一个事物的命令发送给redis,然后再让redis依次执行这些命令。

    127.0.0.1:6379> MULTI
    OK
    127.0.0.1:6379> SADD setA -1 0
    QUEUED
    127.0.0.1:6379> SADD setB 5 6
    QUEUED
    127.0.0.1:6379> EXEC
    1) (integer) 2
    2) (integer) 2
    127.0.0.1:6379> SMEMBERS  setA
    1) "-1"
    2) "0"
    3) "1"
    4) "2"
    5) "3"
    127.0.0.1:6379> SMEMBERS setB
    1) "2"
    2) "3"
    3) "4"
    4) "5"
    5) "6"
    

    首先,使用MULTI命令告诉redis,接下来的数条命令属于同一个事物。redis会将这几条命令暂时缓存起来,并返回OK。接下来输入命令,redis会返回QUEUE表示已将命令放到缓存队列中。当把所有要执行的命令发送给redis之后,使用EXEC命令告诉Redis将等待执行的事物队列中的全部命令按照顺序执行。

    Redis保证了一个事务中要么都执行,要么都不执行。如果在发送EXEC命令之前客户端断线了,那么Redis会清空事物队列,事务中所有的命令都不会执行。Redis事物还能保证一个事务内命令依次执行而不被其他的命令插入。

    错误处理

    语法错误

    语法错误指命令错误或者命令不存在。

    只要有一个命令有语法错误,执行EXEC命令后Redis就会直接返回错误,连正确的命令也不会被执行。

    运行错误

    运行错误指在命令执行时出现的错误,比如使用散列类型的命令操作集合类型的key。这种错误在实际执行之前redis是不会发现的,所以在事物里这样的命令是会被redis接受并执行的。

    如果事务里有一条命令出现了错误,事务里其他的命令依然会被执行(包括出错命令之后的命令)。

    ++redis的事务并没有关系数据库提供的rollback功能,为此务必避免运行错误。++

    WATCH 命令介绍

    WATCH命令可以监控一个或者多个键,一旦其中有一个键被修改(或删除),之后的事务就不会执行。

    127.0.0.1:6379> watch key
    OK
    127.0.0.1:6379> set key 2
    OK
    127.0.0.1:6379> set hi 3
    OK
    127.0.0.1:6379> multi
    OK
    127.0.0.1:6379> set hi 2 //不会被执行
    QUEUED
    127.0.0.1:6379> set key 3  //不会被执行
    QUEUED
    127.0.0.1:6379> set hi 4  // 不会被执行
    QUEUED
    127.0.0.1:6379> exec
    (nil)
    127.0.0.1:6379> get key
    "2"
    127.0.0.1:6379> get hi
    "3"
    

    相关文章

      网友评论

          本文标题:Redis基础(2)——事物

          本文链接:https://www.haomeiwen.com/subject/wulcjttx.html