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 ...
随机推荐
- 在Windows Server 2008中安装IIS
1.右键“我的电脑”,选择“管理”,打开“服务器管理器” 2.点击左边菜单栏“角色”调出角色窗口 3.接着点击“添加角色”,弹出添加“角色向导” 4.点击“下一步”进入服务器角色选项 5.勾选“Web ...
- DFS HDOJ 2614 Beat
题目传送门 /* 题意:处理完i问题后去处理j问题,要满足a[i][j] <= a[j][k],问最多能有多少问题可以解决 DFS简单题:以每次处理的问题作为过程(即行数),最多能解决n个问题, ...
- java 文件md5+字符串md5 实现
import org.apache.commons.codec.binary.Hex; import org.apache.commons.codec.digest.DigestUtils; impo ...
- 设置完在Canvas的位置后,控件HitTest不响应的问题
have a Canvas with a couple of elements on it like Line, Path and Text Box. In the MouseOver event o ...
- extjs tips
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- BZOJ4388 : JOI2012 invitation
注意到这个过程实质就是prim算法求最大生成树的过程. 首先通过离散化+线段树将$A+B$个点缩为上下各$O(n)$个点. 设已加入集合为$S$,未加入集合为$T$. 建立两棵线段树,维护所有在$T$ ...
- POJ 3318 Matrix Multiplication(随机算法)
题目链接 随机算法使劲水...srand((unsigned)time(0))比srand(NULL)靠谱很多,可能是更加随机. #include <cstdio> #include &l ...
- COJ976 WZJ的数据结构(负二十四)
试题描述 输入一个字符串S,回答Q次问题,给你l,r,输出从Sl--Sr组成的串在S中出现了多少次. 输入 第一行为一个字符串S.第二行为一个正整数Q.接下来Q行每行为l,r. 输出 对于每个询问,输 ...
- java获取获得Timestamp类型的当前系统时间
java获取取得Timestamp类型的当前系统时间java获取取得Timestamp类型的当前系统时间 格式:2010-11-04 16:19:42 方法1: Timestamp d = new T ...
- Nhibernate Case SUM
SELECT ID END) as nbRowWithValueOf2, END) as nbRowWithValueOf3 FROM Foo GROUP BY ID queryover = quer ...