目录

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



    最后执行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"

Redis-第六章节-事务的更多相关文章

  1. 【redis专题(9)】事务

    Redis支持简单的事务,所谓简单是因为其不支持回滚(回滚是用队列模仿的),与mysql有以下区别 rollback与discard的区别: 如果已经成功执行了2条语句, 第3条语句出错 Rollba ...

  2. redis 有没有ACID事务

    看redis官网的介绍: redis确实是有事务的,但是和传统的ACID是否相同呢? 原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生. 一致 ...

  3. Redis(五)事务

    Redis(五)事务 引用wiki中关于事务处理的定义: Transaction processing is information processing in computer science th ...

  4. Golang 实现 Redis(8): TCC分布式事务

    本文是使用 golang 实现 redis 系列的第八篇, 将介绍如何在分布式缓存中使用 Try-Commit-Catch 方式来解决分布式一致性问题. godis 集群的源码在Github:Godi ...

  5. redis不完整的事务实现Transaction

    使用场景 redis一个命令执行是单线程的,不用担心并发冲突,如果你想有几个命令想像一个命令一样,在这几个命令执行过程中不会执行别的客户端发来的命令 ,也就是原子性,就可以用 redis Transa ...

  6. 华为云企业级Redis揭秘第16期:超越开源Redis的ACID"真"事务

    摘要: 开源Redis只支持伪事务,应用场景受限.高斯Redis发布企业级事务特性,支持完备ACID,为交易.库存等上层业务带来全新可能. 本文分享自华为云社区<华为云企业级Redis揭秘第16 ...

  7. Redis(六):Redis的事务

    Redis的事务目录导航: 是什么 能干嘛 怎么玩 3阶段 3特性 是什么 可以一次执行多个命令,本质是一组命令的集合.一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞 ...

  8. Redis系列六 Redis事务

    Redis事务 1.介绍 在Redis事务中可以一次执行多个命令,本质是一组命令的集合.一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞. 2.事务的作用 一个队列中, ...

  9. Redis系列二之事务及消息通知

    一.事务 Redis中的事务是一组命令的集合.一个事务中的命令要么都执行,要么都不执行. 1.事务简介 事务的原理是先将一个事务的命令发送给Redis,然后再让Redis依次执行这些命令.下面看一个示 ...

随机推荐

  1. Maven中使用JSTL

    在pom.xml文件下面增加如下的依赖包: <dependency> <groupId>jstl</groupId> <artifactId>jstl& ...

  2. API企业级网关设计

    前言 摘自--https://github.com/aCoder2013/blog/issues/35 假设你正在开发一个电商网站,那么这里会涉及到很多后端的微服务,比如会员.商品.推荐服务等等. 那 ...

  3. 原生js的一些盲点

    1.document.readyState 有三个值loading  interactive //loading 仍在加载 interactive  文档已被解析 正在加载状态结束 但是样式表和框架之 ...

  4. YGGL.sql

    (将表复制粘贴至记事本,再用source命令导入到数据库中) CREATE TABLE `departments` ( `部门编号` char(3) NOT NULL COMMENT '部门编号', ...

  5. VRP OS Management

    From WizNote

  6. Docker-Docker部署SpringBoot项目

    1.手工方式 1.1.准备Springboot jar项目 将项目打包成jar 1.2.编写Dockerfile FROM java:8 VOLUME /tmp ADD elk-web-1.0-SNA ...

  7. LeetCode24 两两交换链表中的节点

    给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 说明: 你的算法只能使用常数的 ...

  8. Python 日志打印之logging.getLogger源码分析

    日志打印之logging.getLogger源码分析 By:授客 QQ:1033553122 #实践环境 WIN 10 Python 3.6.5 #函数说明 logging.getLogger(nam ...

  9. ./utils/build.sh: line 131: patch: command not found

    安装 percona-xtrabackup-2.1.5过程中遇到如下问题: [root@test percona-xtrabackup-2.1.5]# ./utils/build.sh innodb5 ...

  10. kubernets之pod的标签的使用

    一 对于kubernets里面的资源标记完成之后的使用 1 node节点标签的应用(将资源调度到特定的节点上) #kubia-gpu.ymlapiVersion: v1 kind: Pod metad ...