Redis 的Transaction事务处理相关代码java实现

Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:

事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。
一个事务从开始到执行会经历以下三个阶段:

开始事务。
命令入队。
执行事务。
单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。

事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。

这是官网上的说明 From redis docs on transactions:

It's important to note that even when a command fails, all the other commands in the queue are processed – Redis will not stop the processing of commands.

具体代码如下:

1,引入jedis jar 包

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>

 

2,代码实现

package com.hcmony.sword.redis;
 
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.Transaction;
 
/**
 * <h3>Shenjue.java基本描述</h3>
 * <p></p>
 *
 * @author hcmony
 * @since V1.0.0, 2019/05/06 20:07
 */
public abstract class RedisCaheTransactionHelper{
 
	private final JedisPool jedisPool;
 
	public RedisCaheTransactionHelper(JedisPool jedisPool) {
		this.jedisPool = jedisPool;
	}
 
	public void multi(){
		Jedis jedis = null;
		Transaction transaction = null;
		try {
			jedis = jedisPool.getResource();
			transaction = jedis.multi();
			doSerive(transaction);
		}
		finally {
			if (null != jedis) {
				jedis.close();
			}
		}
	}
 
	protected abstract void doSerive(Transaction transaction);
 
 
	static class Test extends RedisCaheTransactionHelper{
 
		public Test(JedisPool jedisPool) {
			super(jedisPool);
		}
 
		@Override
		protected void doSerive(Transaction transaction) {
			transaction.set("1","1");
			transaction.set("2","2");
			transaction.exec();
		}
 
 
		public static void main(String[] args) {
			//默认连接本地redis,
			// loclhost:6379
			JedisPool jedisPool = new JedisPool();
			Test test = new Test(jedisPool);
			test.multi();
		}
	}
 
 
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值