Redis系列学习(三)之java api接入及事务 (补)
来源:互联网 发布:安卓系统编程入门pdf 编辑:程序博客网 时间:2024/06/07 20:13
Redis系列学习(三)之java api接入及事务 (补)
- 一 引言
- 二 事务例子补充
- 三 watch命令
一、 引言
本篇为补充《Redis系列学习(三)之java api接入及事务》文章里事务的例子
二、 事务例子补充
没加事务
private void testTransaction(){ System.out.println("======================测试事务=========================="); jedis.set("sex", "man"); jedis.incr("sex"); jedis.set("hello", "world"); }
结果如下:
数据库查看:
先添加“sex=man”数据,然后调用”incr”命令做加1操作,由于值”man”不是整型,所以加1操作发生了运行时错误,抛错之后的命令不会继续执行,我们看到运行时发生的错误,但还是成功。
如果加上事务会怎样?上篇文章讲“运行时错误,即使发生的错误,已经修改的值并不会回滚,并且后面命令会继续执行”,下面验证一下。
private void testTransaction(){ System.out.println("======================测试事务=========================="); Transaction transaction = jedis.multi(); transaction.set("sex", "man"); transaction.incr("sex"); transaction.set("hello", "world"); transaction.exec(); }
IDE结果如下图:
中间“transaction.incr(“sex”);”命令返回了执行错误消息,但后面命令还是继续执行。
数据库如下图
虽然发生了运行时错误,但并没有报异常错误,而且发生错误的地方后面命令还继续执行。
运行时发生的错误,即使错误发生(redis接收并执行,并没有把它当作错误来处理),后面的命令也会继续执行。
三、 watch命令
WATCH命令可以监控一个或多个键,一旦其中有一个键被修改(或删除),之后的事务就不会执行。监控一直持续到EXEC命令(事务中的命令是在EXEC之后才执行的,所以在MULTI命令后可以修改WATCH监控的键值)
例子:
private void testTransaction(){ System.out.println("======================测试事务=========================="); jedis.watch("sex"); jedis.set("sex", "man2"); Transaction transaction = jedis.multi(); transaction.set("country", "china"); transaction.set("sex", "female"); transaction.set("hello", "world"); List<Object> results = transaction.exec(); System.out.println(results.toString()); }
数据库结果如下图
例子里,原始数据是“sex=man”,代码里先使用watch监控sex字段,然后修改sex=man2,虽然在事务命令队列里再将set设置”female”,但结果sex=man2。由些我们可以知道由于在开启事务之前sex被修改了,导致之事务里的命令全部不会执行,这里强调“事务队列里命令全部不会执行”
阅读全文
0 1
- Redis系列学习(三)之java api接入及事务 (补)
- Redis系列学习(三)之java api接入及事务
- Redis之三:事务
- Redis 事务和Pipeline--JAVA(系列文章三)
- Redis学习笔记(三)--事务
- 分布式缓存技术redis学习系列(三)——redis高级应用(主从、事务与锁、持久化)
- 分布式缓存技术redis学习系列(三)——redis高级应用(主从、事务与锁、持久化)
- 分布式缓存技术redis学习系列(三)——redis高级应用(主从、事务与锁、持久化)
- 分布式缓存技术redis学习系列(三)——redis高级应用(主从、事务与锁、持久化)
- 分布式缓存技术redis学习系列(三)——redis高级应用(主从、事务与锁、持久化)
- 分布式缓存技术redis学习系列(三)——redis高级应用(主从、事务与锁、持久化)
- Redis 讲解系列之 Redis的事务
- Java事务三种类型:JDBC事务、JTA(Java Transaction API)事务、容器事务
- java事务大总结(三) 理解学习 JTA(Java Transaction API)
- Redis系列之持久化(三)
- 大数据学习系列之三 ----- HBase Java Api 图文详解
- Redis学习之事务控制
- redis学习笔记三(事务、主从复制)
- kmp详解
- 并查集入门--hd 1233 还是畅通工程 【klckr prim】
- 设计模式之工厂模式
- C
- ZOJ-2091-Mean of Subsequence (反证法的运用!!)
- Redis系列学习(三)之java api接入及事务 (补)
- C++的标准库与命名空间
- hdu6134 Battlestation Operational 莫比乌斯反演
- A
- Python3之round用法
- android 动画 -- tween动画(续)
- 洛谷 P3375 KMP字符串匹配
- 遍历list,remove出现问题
- Java并发编程实战(四)活跃性