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

本文介绍了Redis的事务处理,包括事务的隔离性和原子性特点,以及事务的三个执行阶段:开始、命令入队和执行。尽管单个命令是原子性的,但Redis事务本身不保证原子性。Redis事务可以看作批量执行的脚本,但失败的命令不会回滚成功命令,也不会阻止后续命令的执行。文章提供了一个使用Jedis进行Redis事务操作的Java代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();
		}
	}


}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值