redis事务与监控

Author:SimpleWu

GitHub-redis

在redis中它的事务与批处理非常相似

Redis中的事务(transaction)是一组命令的集合。事务同命令一样都是Redis的最小执行单位,一个事务中的命令要么都执行,要么都不执行。事务的应用非常普遍,如银行转账过程中A给B汇款,首先系统从A的账户中将钱划走,然后向B的账户增加相应的金额。这两个步骤必须属于同一个事务,要么全执行,要么全不执行。否则只执行第一步,钱就凭空消失了,这显然让人无法接受。

Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:

  1. 事务是一个单独的隔离操作,事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
  2. 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行
事务的三个步骤
  1. 开启事务:以MULTI开启一个事务。
  2. 命令入队:将多个命令添加到命令队列中,接到这些命令不会立即执行,而是放到等待执行的事务队列中。
  3. 执行事务:有EXEC执行事务。(或者DISCARD取消执行)
MULTI 标记一个事务块的开始。
EXEC 执行所有事务块内的命令。
DISCARD 取消事务,放弃执行事务块内的所有命令。
UNWATCH 取消 WATCH 命令对所有 key 的监视。
WATCH key [key ...] 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断
常见案例:

正常执行:指的是队列的中所有操作全部都会执行

全部取消:指的是队列中的所有操作全部都会被取消

执行:DISCARD 

全体连坐:如果指令集中有一条在加入队列时报错,则队列中的所有指令全部取消。指的是有语法错误

冤有头债有主:如果指令已经加入到队列中,但执行失败,只有当前指令失败,其它继续执行。指的是已经添加到队列但是执行失败

watch监控

watch监控表示对需要操作的key添加一个乐观锁,防止另一个用户进行修改,导致结果错误。

悲观锁:

顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会被block直到它拿到锁。传统的关系型数据库里面就用到了很多这种锁,比如行锁,表锁,读锁,写锁等,都是在操作之前先上锁。

乐观锁:

顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。提交的版本号必须大于当前版本号才可以提交。

案例:

图一

图二

图解:当图一开启监控key “money”,开启事务的时候加入拿着的是版本1,在事务执行过程中图二第二个客户端修改了版本一的指,现在库中存在的是版本二,而incrby money 200 在执行exec的时候我们的是版本二,乐观锁在这个时候并不允许我们提交,因为当前库中版本是2而我们提交的版本也是2。提交的版本号必须大于当前版本号才可以提交。!!!!!!!!!!

通过watch命令在事务执行之前监控了多个keys,倘若在watch之后有任何的key的值发生了变化,exec命令执行的事务会被取消。

事务的三个特性

单独的隔离性:事务中的所有的命令都会序列化,按顺序执行,事务在执行过程中,不会被其它客户端发送过来的命令请求所打断。

没有隔离级别的概念:队列中的命令没有提交之前都不会实际的被执行,因为事务提交前任何指令都不会被实际执行,也就不存在”事务内的查询要看到事务里的更新。

不保证原子性:redis同一个事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚

Redis事务概念的更多相关文章

  1. Redis订阅和发布模式和Redis事务

    -------------------Redis订阅和发布模式------------------- 1.概念     Redis 发布订阅(pub/sub)是一种消息通信模式:     发送者(pu ...

  2. Redis学习——Redis事务

    Redis和传统的关系型数据库一样,因为具有持久化的功能,所以也有事务的功能! 有关事务相关的概念和介绍,这里就不做介绍. 在学习Redis的事务之前,首先抛出一个面试的问题. 面试官:请问Redis ...

  3. redis学习(四)redis事务

    redis事务 1.redis事务介绍 redis的事务可以理解为一系列串行命令的集合.redis的事务和单条命令一样,都是redis的最小执行单位,因此一个事务内的命令,要么全部执行,要么全部不执行 ...

  4. C#Redis 事务操作

    一.理论 还是抄前辈的理论知识. 和众多其它数据库一样,Redis作为NoSQL数据库也同样提供了事务机制.在Redis中,MULTI/EXEC/DISCARD/WATCH这四个命令是我们实现事务的基 ...

  5. Redis之Redis事务

    Redis事务的概念: Redis 事务的本质是一组命令的集合.事务支持一次执行多个命令,一个事务中所有命令都会被序列化.在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会 ...

  6. Redis系列六 Redis事务

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

  7. Redis事务【十二】

    一.概述: 和众多其它数据库一样,Redis作为NoSQL数据库也同样提供了事务机制.在Redis中,MULTI/EXEC/DISCARD/WATCH这四个命令是我们实现事务的基石.相信对有关系型数据 ...

  8. 详谈:Redis事务和消息订阅

    一.Redis事务 1.概念 可以一次执行多个命令,本质是一组命令的集合.一个事务中的 所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞. 事务能做的事: 一个队列中,一次性.顺序 ...

  9. redis事务、并发及应用场景

    目录 事务概念 事务命令 乐观锁 悲观锁 并发控制及过期时间 队列 队列防丢失 阻塞队列 时间区间控制 持久化 RDB AOF 命令追加 文件写入.同步 RDB.AOF优缺点 RDB优缺 AOF优缺 ...

随机推荐

  1. Leetcode#118. Pascal's Triangle(杨辉三角)

    题目描述 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 5 输出: [ [1], [1,1], [1,2, ...

  2. 1、jQuery 为什么要学习jQuery?

    <jQuery精品教程视频/资料/19-jQuery第一天/01-教学资料/笔记/preview/笔记.html> [01-让div显示与设置内容.html] 使用javascript开发 ...

  3. 前端-----css(1)

    css概述 CSS是Cascading Style Sheets的简称,中文称为层叠样式表,用来控制网页数据的表现,可以使网页的表现与数据内容分离. css知识点 注释 /* 注释内容 */ css四 ...

  4. vim设置行号

    vim打开文件后在底行模式下输入:set nu可以在文件每行开头显示对应的行数: 若想vim打开文件默认显示行数,执行:vim /etc/vimrc,在打开的文件末尾添上:set nu,保存退出即可!

  5. 在Linux环境下使用Jexus部署ASP.NET Core

    关于如何在Linux中添加ASP.NET Core运行时环境请参考我的上一篇文章,本文章将不再做赘述. 本文章运行环境如下:  (1) 安装独立版Jexus 本教程安装的是独立版的Jexus,独立版的 ...

  6. 数字图像处理的Matlab实现(4)—灰度变换与空间滤波

    第3章 灰度变换与空间滤波(2) 3.3 直方图处理与函数绘图 基于从图像亮度直方图中提取的信息的亮度变换函数,在诸如增强.压缩.分割.描述等方面的图像处理中扮演着基础性的角色.本节的重点在于获取.绘 ...

  7. HDOJ 1217 Arbitrage (最短路)

    题意:每两种货币之间都有不同的汇率  如果换回自己最后是赚的 输出Yes 否则是No 因为最多只有三十种货币 所以用Floyd是可行的 与一般的最短路板子不同的地方 汇率是要乘而不是加 如果乘上一个小 ...

  8. 虚拟机CentOS7下NAT模式的网络配置

    NAT模式 就是让Guest OS借助NAT(网络地址交换)功能,通过Host OS所在的网络来访问公网.也就是说,使用NAT模式可以实现Guest OS轻松访问互联网,可以访问宿主计算机所在网络的其 ...

  9. U盘文件系统格式

    u盘文件系统主要有FAT32.NTFS两种 ● FAT32文件系统 FAT32使用4个字节(也就是32位)的空间来表示每个扇区(Sector)配置文件的情形,故称之为FAT32.FAT16的分区容量上 ...

  10. Unix下5种I/O模型

    Unix下I/O模型主要分为5种: (1)阻塞式I/O (2)非阻塞式I/O (3)I/O复用(select和poll) (4)信号驱动式I/O (5)异步I/O 1.阻塞式I/O模型 unix基本的 ...