ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Redis-第六章节-事务

2021-01-30 17:32:04  阅读:214  来源: 互联网

标签:事务 set OK 命令 Redis 6379 第六章 QUEUED localhost


目录

  • 简介
  • 执行过程
  • 特点
  • 案例
  • 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)编译型错误
    redis-error
    最后执行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"
    
    

标签:事务,set,OK,命令,Redis,6379,第六章,QUEUED,localhost
来源: https://www.cnblogs.com/ld320321/p/14349778.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有