文档章节

redis 事务控制

山下狮子
 山下狮子
发布于 2014/06/18 18:08
字数 630
阅读 451
收藏 3

什么是事物,就不说了。


redis 127.0.0.1:6379> multi           # 开启事物
OK
redis 127.0.0.1:6379> set foo 1      # 所有的命令加入到一个队列中,先存起来,不执行
QUEUED
redis 127.0.0.1:6379> get foo        #存到队列,一会执行
QUEUED
redis 127.0.0.1:6379> exec           #开始执行,并返回所有的执行结果
1) OK
2) "1"


事物中的错误:

1)语法错误

                        redis 127.0.0.1:6379> multi
                        OK
                        redis 127.0.0.1:6379> sert foo
                         (error) ERR unknown command 'sert'
                        redis 127.0.0.1:6379> exec
                        (error) EXECABORT Transaction discarded because of previous errors.

可以看到语法错误,在事物中会直接报错,不返回QUEUED,输入exec时,会丢弃事物中所有的命令,拒绝执行是有事物中的命令,即使有正确的命令

2)执行命令时错误  主要是命令和要操作的数据类型不匹配

                    redis 127.0.0.1:6379> multi
                    OK
                    redis 127.0.0.1:6379> set key 1
                    QUEUED
                    redis 127.0.0.1:6379> sadd key 2
                    QUEUED
                    redis 127.0.0.1:6379> exec
                    1) OK
                    2) (error) ERR Operation against a key holding the wrong kind of value
                    redis 127.0.0.1:6379> get key
                    "1"
执行时命令错误,事物中的正确的命令被执行了,错误的会返回错误信息。

so:

语法错误,在开发时很容易找出来。

运行时错误,需要认真检查你操作的数据,和你的命令匹配吗。

 Redis 不支持回滚(roll back),所以语法错误还好说,执行错误时,需要你自己收拾烂滩子的。


放弃事物  discard 

redis 127.0.0.1:6379> set foo 1
OK
redis 127.0.0.1:6379> multi
OK
redis 127.0.0.1:6379> incr foo
QUEUED
redis 127.0.0.1:6379> discard    #放弃事物的命令
OK
redis 127.0.0.1:6379> get foo   #值没有被修改
"1"


WATCH命令:我的理解就是监视几个值,一旦被修改了,事物中的命令将不会执行

简单说就是,找条狗看着一个或多个面包,要是被谁动了,咬过,舔过。你肯定不在吃了,就是这个意思。

redis 127.0.0.1:6379> set key 1
OK
redis 127.0.0.1:6379> watch key    #找条狗看着
OK
redis 127.0.0.1:6379> set key 2    #被谁给咬了一口
OK
redis 127.0.0.1:6379> multi            #开启事物
OK
redis 127.0.0.1:6379> set key 3    #加入命令
QUEUED
redis 127.0.0.1:6379> exec          # 执行事物,发现被谁咬了一口,拒绝执行,哪来回哪去
(nil)
redis 127.0.0.1:6379> get key    #  被咬了一口的值
"2"


WATCH key1 key2 key3  监视多个键

WATCH 命令可以被调用多次。 对键的监视从 WATCH 执行之后开始生效, 直到调用 EXEC 为止

当 EXEC 被调用时, 不管事务是否成功执行, 对所有键的监视都会被取消


© 著作权归作者所有

山下狮子
粉丝 24
博文 115
码字总数 58167
作品 0
东城
程序员
私信 提问
加载中

评论(2)

山下狮子
山下狮子 博主

引用来自“zhuqi259”的评论

事务
zhuqi259
zhuqi259
事务
Redis数据库高级实用特性:事务控制

 redis对事务的支持目前还比较简单。redis只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令。 由于redis是单线程来处理所有client的请求的所以做到这点...

凯文加内特
2015/11/26
106
0
Redis中的事务

Redis中的事务非常弱,总的理解起来,只适合做乐观的并发控制 以下摘自网络 Jedis Pipeline & Transaction Transaction Redis 提供了简单的"事务"能力,MULTI、EXEC、DISCARD、WATCH/UNWATCH...

varvelworld
2015/05/17
7
0
DreamWork/mgfinal

mgfinal 基于mgwork(servlet3.0多实例非单例)做mvc框架,mybatis做orm框架,mgioc做单例容器的mgfinal框架,mgutil做日志及常用工具方法管理,致力于打造实用的java后台底层。 适用于中小型...

DreamWork
2016/05/07
0
0
Redis 事务

先手动执行如下命令,然后看看效果 >multi >set str1 "hello world" >"QUEUED" >set str2 hello world >"QUEUED" >set str2 "welcome" >"QUEUED" >exec > 1) "OK" > 2) "ERR syntax error" >......

learn_more
2016/09/10
44
0
使用jedis集群同时对一条记录进行读写事务控制

服务器:redis-3.0.0. 客户端:jedis-2.6.2 目前我的代码实现是在一台redis服务器上面可以,但是如果是集群的情况下,JedisCluster类里面没有提供事务控制相关方法,请问怎么在集群下对一个k...

段英杰
2015/04/22
6.1K
2

没有更多内容

加载失败,请刷新页面

加载更多

64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
今天
13
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
今天
7
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
今天
10
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
今天
12
0
实验分析性专业硕士提纲撰写要点

为什么您需要研究论文的提纲? 首先当您进行研究时,您需要聚集许多信息和想法,研究论文提纲可以较好地组织你的想法, 了解您研究资料的流畅度和程度。确保你写作时不会错过任何重要资料以此...

论文辅导员
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部