Redis-第六章节-事务

目录

  • 简介
  • 执行过程
  • 特点
  • 案例
  • 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"
    
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 所谓事务,就是一个非黑即白的定义,一组命令,要么全做,要么全部,不存在半做半不做的灰色地带。 这一点对于保持数据库...
    冰河winner阅读 2,372评论 0 1
  • Redis通过MULTI、EXEC、WATCH等命令来实现事务(transaction)功能。事务提供了一种将多个...
    johnny_zm阅读 1,135评论 0 0
  • 如果你曾了解过关系型数据库事务的话,我相信这篇文章对你来说是很容易理解的。 具体什么是事务我就不说不多了,直接讲 ...
    Java高级新技术阅读 1,738评论 0 0
  • 推荐指数: 6.0 书籍主旨关键词:特权、焦点、注意力、语言联想、情景联想 观点: 1.统计学现在叫数据分析,社会...
    Jenaral阅读 11,038评论 0 5
  • 城空了,有树长出来 我的城死了 铸起它的人,杀死它的人 不愿因为这件事而骄傲 一座城的终结 永远因为终结这件事而显...
    于十六阅读 7,908评论 6 17

友情链接更多精彩内容