你问我Redis支不支持事物?告诉你,Redis对事物的支持是部分支持(对比关系型数据库,没有强一致性)

定义:一个队列、一次性、顺序的、排他性的执行一系列命令

常用命令:

  DISCARD  取消事物,放弃执行事物块内的所有命令

  EXEC  执行事物块内的所有命令

  MULTI  标记一个事物块的开始

  UNWATCH  取消watch命令对所有key的监控

  WATCH  监控一个或多个key,如果在事物执行之前,key被其他命令改动,那么事物将被打断

Case1:正常执行

   

Case2:放弃事物

  

  我们可以发现,k1还是Case1中设置的值

Case3:全体连坐(一个捣蛋,全体都死)

  

Case4:冤头债主(错误的不执行,正确的照常执行)

  

  k1位字符型,增加1显然不行,但是语法没错(加入了队列,不像Case3中的直接报错)。执行EXEC时,出现错误的语句块不会执行成功,但不影响事物块中其他的命令执行

Case5:watch监控

  ⑴ 第一步:(balance 可用余额,debt:欠款),假设我买了个包子20块刷了我的信用卡,可用余额减20,欠款加20

  

  ⑵ 第二步(当第一个窗口watch[监控]balance的后,在第二个窗口将balance设置成了1000块,然后我在第一个窗口又买了个包子花了20块,执行事物发现,并没有成功,获得最新的balance为1000):

  

  上面这部类似于数据库中的乐观锁,当我们修改一条记录的时候,别人也在试图修改这条记录,当别人先于我之前就提交了,那么我提交的时候,就不能覆盖别人提交的数据,所以rollback了。

  ⑶ 第三步(第一个窗口watch[监控]我的余额后,在第二个窗口修改余额,假设此时我知道有人改了我的余额,那我在第一个窗口Unwatch一下,然后再watch下,设置我的余额为100,欠款为0,执行成功):

  

  小结:WATCH监控一个或多个key,如果在事物执行之前,key被其他命令改动,那么事物将被打断(事物队列都不会被执行)

       一旦执行了exec,之前加的监控锁都会被取消

          如果是watch多个key,倘若watch之后有人改动过其中的key,exec执行的事物将都被放弃,同时返回NullMulti-bulk应答以通知调用者事物执行失败

  

Redis之Transactions(事物)的更多相关文章

  1. Springboot与ActiveMQ、Solr、Redis中分布式事物的初步探索

    Springboot与ActiveMQ.Solr.Redis中分布式事物的初步探索 解决的场景:事物中的异步问题,当要求数据库与solr服务器的最终一致时. 程序条件: 利用消息队列,当数据库添加成功 ...

  2. Redis集群事物提交异常Multi-key operations must involve a single slot

    redis做完集群后不同键在同一事物中提交,因为key的hash计算结果不同不能分配到同一个分片上,因此出现此异常. 解决方案:在本次事物的key内添加"{tag}",这时redi ...

  3. Redis 命令 - Transactions

    DISCARD Discard all commands issued after MULTI 127.0.0.1:6379> MGET bank:A:account bank:B:accoun ...

  4. Redis常用数据类型和事物以及并发

    Redis数据类型 基本类型(String int): 如 set key value .get key 等 所有命令都是按照 key value keys * 可以将全部数据列出,其中后面的 &qu ...

  5. Redis事物及锁的运用

    redis与mysql事物比较如下: 下面是一个redis事物运用于买票的demo

  6. Redis应用场景-转载

    1.  MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的 ...

  7. Redis学习笔记--五种数据类型的使用场景

    String 1.String 常用命令: 除了get.set.incr.decr mget等操作外,Redis还提供了下面一些操作: 获取字符串长度 往字符串append内容 设置和获取字符串的某一 ...

  8. Redis基础知识之—— 缓存应用场景

    转载原文:http://www.cnblogs.com/jinshengzhi/articles/5225718.html 一.MySql+Memcached架构的问题 Memcached采用客户端- ...

  9. <转>Redis 应用场景

    http://blog.csdn.net/hguisu/article/details/8836819 1.  MySql+Memcached 架构的问题 Memcached采用客户端-服务器的架构, ...

随机推荐

  1. 【CF633D】Fibonacci-ish

    题目描述 小y最近迷上了fibonacci数列,他定义了一种数列叫类fibonacci数列: 1.这个数列包含至少\(2\)个元素 2.\(f_0\)和\(f_1\)是任意选取的 3.\(f_{n+2 ...

  2. 【比赛】NOIP2018 旅行

    发现 \(m\) 只有两种取值,于是可做了 树的直接贪心 图的枚举环上的边去掉,然后做树的贪心,搜的时候剪一下枝吧 写得有点乱 #include<bits/stdc++.h> #defin ...

  3. CS Academy Gcd on a Circle(dp + 线段树)

    题意 给你一个长为 \(n\) 的环,你可以把它断成任意 \(k\) 段 \((1 < k \le n)\) ,使得每一段的 \(\gcd\) 都 \(>1\) . 问总共有多少种方案,对 ...

  4. 自学Python4.7-生成器(方式一:生成器函数)

    自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...

  5. 「洛谷1903」「BZOJ2120」「国家集训队」数颜色【带修莫队,树套树】

    题目链接 [BZOJ传送门] [洛谷传送门] 题目大意 单点修改,区间查询有多少种数字. 解法1--树套树 可以直接暴力树套树,我比较懒,不想写. 稍微口胡一下,可以直接来一个树状数组套主席树,也就是 ...

  6. 【dfs】p1451 求细胞数量

    题目描述 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数.(1<=m,n<=100)? 输入输出格式## ...

  7. 「NOI2016」优秀的拆分 解题报告

    「NOI2016」优秀的拆分 这不是个SAM题,只是个LCP题目 95分的Hash很简单,枚举每个点为开头和末尾的AA串个数,然后乘一下之类的. 考虑怎么快速求"每个点为开头和末尾的AA串个 ...

  8. docker命令篇

    基础命令: 镜像: 获取镜像 $ docker pull centos:7 下拉自己仓库镜像,在后面仓库部分会讲到. 列出镜像: $ docker image ls 删除镜像: $ docker im ...

  9. A.01.03-模块的输入—模拟量输入

    模拟量输入在使用过程中也十分常见,它在很多场合都应用到,但其用法又各有不同,下面列举一些常见的类型进行说明. 第一种为采用模拟口读取离散量的状态,如某开关可能有高.低.悬空三种状态均需能准确判断,这种 ...

  10. CF528D Fuzzy Search

    题意:给定k,只含有ACGT的字符串S和T,求T在S中出现了多少次. 字符匹配:如果S的[i - k, i + k]中有字符x,那么第i位可以匹配x. 解: 首先预处理:f[i][j]表示S的第i位能 ...