• redis的简单事务


    Redis对事务的支持目前还比较简单。Redis只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令。当一个client在一个连接中发出multi命令时,这个连接会进入一个事务上下文,该连接后续的命令不会立即执行,而是先放到一个队列中,当执行exec命令时,redis会顺序的执行队列中的所有命令,若需要撤销队列中的所有命令也可以使用discard命令执行撤销。

     试验1.启动并执行一个批处理(事务)
     redis 127.0.0.1:6379> mget name age   //读取键的值
     1) "zhangsan"
     2) "22"
     redis 127.0.0.1:6379> multi                  //启动批处理
     OK
     redis 127.0.0.1:6379> set name lisi       //设置name值
     QUEUED
     redis 127.0.0.1:6379> set age 25         //设置age值
     QUEUED
     redis 127.0.0.1:6379> incr age             //运算age值
     QUEUED
     redis 127.0.0.1:6379> exec                  //通过exec提交 处理
     1) OK
     2) OK
     3) (integer) 26
     redis 127.0.0.1:6379> mget name age   //查看结果 执行成功
     1) "lisi"
     2) "26"
          
     试验2.取消一个批处理(事务)
     redis 127.0.0.1:6379> mget name age
     1) "lisi"
     2) "26"
     redis 127.0.0.1:6379> multi
     OK
     redis 127.0.0.1:6379> set name wangwu
     QUEUED
     redis 127.0.0.1:6379> set age 28
     QUEUED
     redis 127.0.0.1:6379> discard                //使用discard取消批处理 回滚
     OK
     redis 127.0.0.1:6379> mget name age    //查看结果 没有执行
     1) "lisi"
     2) "26"


     试验3.redis的批处理(事务)的不成熟性
     redis 127.0.0.1:6379> mget name age
     1) "lisi"
     2) "26"
     redis 127.0.0.1:6379> multi
     OK
     redis 127.0.0.1:6379> incr name
     QUEUED
     redis 127.0.0.1:6379> incr age
     QUEUED
     redis 127.0.0.1:6379> exec                                     //提交执行
     1) (error) ERR value is not an integer or out of range //试图字符串自增运算 报错属正常
     2) (integer) 27                                                       //整型自增运算 成功
     redis 127.0.0.1:6379> mget name age     //查看结果
     1) "lisi"                                                  //执行失败的
     2) "27"                                                  //age却被提交执行了??

     注:一个成熟的事务应该只要有一个命令执行失败整个事务均会回滚,但此处age却执行了,待完善!

  • 相关阅读:
    Intellij Idea 设置之方法快速显示
    HTML转码码
    MIT自然语言处理第五讲:最大熵和对数线性模型(第一部分)
    MIT自然语言处理第五讲:最大熵和对数线性模型(第二部分)
    MIT自然语言处理第五讲:最大熵和对数线性模型(第四部分)
    MIT自然语言处理第五讲:最大熵和对数线性模型(第三部分)
    文本分类专题(ultimate 版)绝对是目前最全的C++版开源文本分类代码和最令人耳目一新的实验解释
    intellij idea教程
    [转] 一个大数相乘的C/C++实现
    5个海盗分金币的问题
  • 原文地址:https://www.cnblogs.com/martinzhang/p/3399972.html
Copyright © 2020-2023  润新知