Redis学习笔记(7)-事务
package cn.com; import java.util.List; import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction; public class Redis_Transactions { public static Jedis redis = new Jedis("localhost", 6379);// 连接redis /**
* 基本事务用法
* 默认给user1,user2都初始化为1000
* 开启事务
* 给user:1:money 加一
* 给user:2:money 减一
* 执行事务
* */
public static void base_trans() throws InterruptedException{
redis.flushDB();//清除数据
redis.set("money", "1000");
redis.set("money1", "1000");
long start = System.currentTimeMillis(); Transaction tx = redis.multi();
tx.incr("money");//给用户user:1 加一块钱
tx.decr("money1");//给用户user:1 减一块钱
List<Object> results = tx.exec();
long end = System.currentTimeMillis();
System.out.println("Transaction SET: " + ((end - start)/1000.0) + " seconds"); System.out.println(redis.get("money"));
System.out.println(redis.get("money1"));
redis.disconnect();
} /**
* 用户事务
* 默认给user1,user2都初始化为1000
* 开启事务
* 给user:1:money 加一
* 给user:2:money 减一
* 我们user:2:money 的值是a 是无法执行减1 的操作 那是否还是照样执行
* 因为redis事务是比较简单的,像下面这种问题需要开发者自己控制,redis 事务是不做控制的
* */
public static void user_trans() throws InterruptedException{
redis.flushDB();//清除数据
redis.set("user:1:money", "1000");
redis.set("user:2:money", "a");
long start = System.currentTimeMillis();
Transaction tx = redis.multi(); tx.incr("user:1:money");//给用户user:1 加一块钱
tx.decr("user:2:money");//给用户user:1 减一块钱 List<Object> results = tx.exec();
long end = System.currentTimeMillis();
System.out.println("Transaction SET: " + ((end - start)/1000.0) + " seconds"); System.out.println(redis.get("user:1:money"));
System.out.println(redis.get("user:2:money"));
redis.disconnect();
} /**
* 执行事务的过程其他客户端改变了其中的key值,解决数据一致性问题
* 通过watch 对key的监控来实现其他客户端修改数据后,事务取消
* 用法 首先用watch 开始对key的监控 在开启事务,顺序一定要先监控在执行事务
* */
public static void changedata_trans() throws InterruptedException{
redis.flushDB();//清除数据
redis.set("user:1:money", "1000");
redis.set("user:2:money", "1000");
long start = System.currentTimeMillis();
redis.watch("user:1:money");
Transaction tx = redis.multi();
tx.incr("user:1:money");//给用户user:1 加一块钱
tx.decr("user:2:money");//给用户user:1 减一块钱
changedata();//改变数据的方法
List<Object> results = tx.exec(); long end = System.currentTimeMillis();
System.out.println("Transaction SET: " + ((end - start)/1000.0) + " seconds"); System.out.println(redis.get("user:1:money"));
System.out.println(redis.get("user:2:money"));
redis.disconnect();
} /**
* 模拟新开客户端对事务中监控的key对应的元素进行修改
*
* **/
public static void changedata(){
Jedis redis2 = new Jedis("localhost", 6379);// 连接redis
redis2.set("user:1:money", "8888");
} public static void main(String [] args) throws InterruptedException{
changedata_trans(); }
}
Redis学习笔记(7)-事务的更多相关文章
- StackExchange.Redis学习笔记(四) 事务控制和Batch批量操作
Redis事物 Redis命令实现事务 Redis的事物包含在multi和exec(执行)或者discard(回滚)命令中 和sql事务不同的是,Redis调用Exec只是将所有的命令变成一个单元一起 ...
- Redis学习笔记~目录
回到占占推荐博客索引 百度百科 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合). ...
- Redis学习笔记之ABC
Redis学习笔记之ABC Redis命令速查 官方帮助文档 中文版本1 中文版本2(反应速度比较慢) 基本操作 字符串操作 set key value get key 哈希 HMSET user:1 ...
- (转)redis 学习笔记(1)-编译、启动、停止
redis 学习笔记(1)-编译.启动.停止 一.下载.编译 redis是以源码方式发行的,先下载源码,然后在linux下编译 1.1 http://www.redis.io/download 先 ...
- Redis学习笔记(1)——Redis简介
一.Redis是什么? Remote Dictionary Server(Redis) 是一个开源的使用ANSI C语言编写.遵守BSD协议.支持网络.可基于内存亦可持久化的日志型.Key-Value ...
- redis学习笔记(3)
redis学习笔记第三部分 --redis持久化介绍,事务,主从复制 三,redis的持久化 RDB(Redis DataBase)AOF(Append Only File) RDB:在指定的时间间隔 ...
- redis 学习笔记(6)-cluster集群搭建
上次写redis的学习笔记还是2014年,一转眼已经快2年过去了,在段时间里,redis最大的变化之一就是cluster功能的正式发布,以前要搞redis集群,得借助一致性hash来自己搞shardi ...
- Redis学习笔记4-Redis配置详解
在Redis中直接启动redis-server服务时, 采用的是默认的配置文件.采用redis-server xxx.conf 这样的方式可以按照指定的配置文件来运行Redis服务.按照本Redi ...
- Redis学习笔记7--Redis管道(pipeline)
redis是一个cs模式的tcp server,使用和http类似的请求响应协议.一个client可以通过一个socket连接发起多个请求命令.每个请求命令发出后client通常会阻塞并等待redis ...
随机推荐
- Spotlight on MySQL监控MySQL服务器
第一步: 下载并安装mysql-connector-3.5x Spotlight on MySQL 连接mysql必须使用mysql-connector-3.5x,5.3.2版本我试了下不行,有兴趣可 ...
- PO3281 Dining(最大流)
如果只有食物或者饮料那就是个二分图最大匹配. 三个真想不出来..然后看题解..从源点到食物到牛到饮料到汇点,这样建图. 所以思维不能太局限了,不懂得把食物和饮料放到牛两边,以为牛吃食物饮料.食物饮料被 ...
- HDU2588 GCD(欧拉函数)
题目问[1,n]中与n的gcd大于等于m的数的个数. 好难想... 假设x满足条件,那么gcd(x,n)=d>=m,而x/d与n/d一定互质. 又x<=n,所以x/d<=n/d. 于 ...
- bzoj1011 [HNOI2008]遥远的行星
1011: [HNOI2008]遥远的行星 Time Limit: 10 Sec Memory Limit: 162 MBSec Special JudgeSubmit: 2480 Solved ...
- TYVJ P1067 合唱队形 Label:上升子序列?
背景 NOIP2004 提高组 第三道 描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号 ...
- 【BZOJ】1090: [SCOI2003]字符串折叠(dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=1090 随便yy一下.. 设f[i,j]表示i-j的最小长度 f[i, j]=min{j-i+1, f ...
- 配置当前用户使用豆瓣pip源
配置当前用户使用豆瓣pip源 mkdir ~/.pip/ cat ~/.pip/pip.conf [global] index-url = http://pypi.douban.com/simpl ...
- Lvs+keepalived+nginx+php的session 保持的算法
●什么是会话保持,有什么作用 会话保持是指在负载均衡器上有一种机制,在作负载均衡的同时,还保证同一用户相关连的访问请求会被分配到同一台服务器上. 会话保持有什么作用呢,举例说明一下 如果有一个用户访问 ...
- linux开启ssh服务
本文概略:1)ubuntu发行版开启ssh.2)centos发行版开启ssh 1.ubuntu发行版安装/开启ssh服务 1.1 安装ssh服务端 sudo apt-get install opens ...
- openstack是什么
下面图片多来自互联网. 云计算: 云计算层次机构模型: IaaS 基础设施服务 PaaS 平台级服务 SaaS 软件级服务 官网:http://www.openstack.org/ openstack ...