美文网首页redis
redis中的事务

redis中的事务

作者: Geroge1226 | 来源:发表于2021-06-10 14:35 被阅读0次

    1、介绍

    redis中的事务(transaction)是一组命令的集合,事务同命令一样都是Redis最小的执行单位,既:一个事务中的命令要么都执行,要么都不执行。这里,redis事务中如果有某一条命令执行失败(人为写错命令),其后的命令仍然会被继续执行。如下

    127.0.0.1:6379[1]> multi
    OK
    127.0.0.1:6379[1]> incrby num 2
    QUEUED
    127.0.0.1:6379[1]> incrby num 6
    QUEUED
    127.0.0.1:6379[1]> decrby num 8
    QUEUED
    127.0.0.1:6379[1]> decrby num aa
    QUEUED
    127.0.0.1:6379[1]> incrby num 10
    QUEUED
    127.0.0.1:6379[1]> exec
    1) (integer) 2
    2) (integer) 8
    3) (integer) 0
    4) (error) ERR value is not an integer or out of range
    5) (integer) 10
    

    2、 事务使用

    redis事务流程如下:

    ①、先向redis发送事务命令开启事务:multi
    ②、编写业务执行命令,将被存放队列:QUEUED
    ③、向redis发送事务执行命令:exec

    【示例】

    [127.0.0.1:6379[2]> multi
    OK
    [127.0.0.1:6379[2]> zadd record 11 geroge 22 tom
    QUEUED
    [127.0.0.1:6379[2]> rpush books Iterly
    QUEUED
    [127.0.0.1:6379[2]> exec
    

    3、与关系数据库mysql中事务区别

    • 关系型数据库事务的作用是保证并发操作数据的一致性,redis单线程执行机制,使得所有来自client端的明理都是原子操作
    • redis事务主要在于保证命令的批量按顺序执行,如果有命令执行失败(redis设计者认为命令错误是人为操作,应该在某个阶段就能纠正),还会继续执行剩下命令,redis没有异常回滚()。而mysql关系性数据库会异常回滚。

    事务中命令全部不执行的情况有 :

    第一种情况:没有执行exec命令
    第二种情况:watch的key发生改变 ;
    第三种情况:discard命令放弃事务。

    4、事务其他说明

    4.1 watch使用

    watch命令可以监控一个或多个键,一旦其中有一个键被修改(或删除),之后的事务就不会执行。监控一直持续到exec命令(事务中的命令是在exec之后才执行的,所以在multi命令后可以修改watch监控的键值)。

    127.0.0.1:6379[1]> watch liang
    OK
    127.0.0.1:6379[1]> set liang 2
    OK
    127.0.0.1:6379[1]> set liang 4
    OK
    127.0.0.1:6379[1]> multi
    OK
    127.0.0.1:6379[1]> set liang 10
    QUEUED
    127.0.0.1:6379[1]> set liang 9
    QUEUED
    127.0.0.1:6379[1]> exec
    (nil)
    127.0.0.1:6379[1]> get liang
    "4"
    

    以上结论:

    • watch 监控键key后面的事务,如果key在事务前有变更,后面事务中的操作都将失败。
    • watch监控的范围到exec范围。

    相关文章

      网友评论

        本文标题:redis中的事务

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