java连接redis数据库,其中事务和管道怎样同时使用? 10

下面的代码是两者分开使用,上面用的是事务,下面用的是管道,我最终想达到的效果是,两个保存操作在管道中执行,但是假如有一个保存失败了,另一个可以"回滚",对redis理解比... 下面的代码是两者分开使用,上面用的是事务,下面用的是管道,我最终想达到的效果是,两个保存操作在管道中执行,但是假如有一个保存失败了,另一个可以"回滚",对redis理解比较浅,不知道提问的对不对,大神见笑了。 展开
 我来答
司马刀剑
高粉答主

2020-05-04 · 每个回答都超有意思的
知道顶级答主
回答量:4.6万
采纳率:93%
帮助的人:7554万
展开全部
一、普通同步方式
最简单和基础的调用方式,
@Testpublic void test1Normal() {
Jedis jedis = new Jedis("localhost"); long start = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) {
String result = jedis.set("n" + i, "n" + i);
} long end = System.currentTimeMillis();
System.out.println("Simple SET: " + ((end - start)/1000.0) + " seconds");
jedis.disconnect();
}1234567891011

很简单吧,每次set之后都可以返回结果,标记是否成功。
二、事务方式(Transactions)
redis的事务很简单,他主要目的是保障,一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令。
看下面例子:
@Testpublic void test2Trans() {
Jedis jedis = new Jedis("localhost"); long start = System.currentTimeMillis();
Transaction tx = jedis.multi(); for (int i = 0; i < 100000; i++) {
tx.set("t" + i, "t" + i);
}
List<Object> results = tx.exec(); long end = System.currentTimeMillis();
System.out.println("Transaction SET: " + ((end - start)/1000.0) + " seconds");
jedis.disconnect();
}12345678910111213

我们调用jedis.watch(…)方法来监控key,如果调用后key值发生变化,则整个事务会执行失败。另外,事务中某个操作失败,并不会回滚其他操作。这一点需要注意。还有,我们可以使用discard()方法来取消事务。
三、管道(Pipelining)
有时,我们需要采用异步方式,一次发送多个指令,不同步等待其返回结果。这样可以取得非常好的执行效率。这就是管道,调用方法如下:
@Testpublic void test3Pipelined() {
Jedis jedis = new Jedis("localhost");
Pipeline pipeline = jedis.pipelined(); long start = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) {
pipeline.set("p" + i, "p" + i);
}
List<Object> results = pipeline.syncAndReturnAll(); long end = System.currentTimeMillis();
System.out.println("Pipelined SET: " + ((end - start)/1000.0) + " seconds");
jedis.disconnect();
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式