Redis事务操作。
配置文件参考:https://blog.csdn.net/qq_38428623/article/details/123217001?utm_source=app&app_version=5.1.1&code=app_1562916241&ulinkId=usr1mkqgl919blen
使用示例:
package com.demo.redis.transaction;
import org.redisson.api.RBucket;
import org.redisson.api.RTransaction;
import org.redisson.api.RedissonClient;
import org.redisson.api.TransactionOptions;
import org.redisson.client.codec.StringCodec;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
import javax.annotation.Resource;
@Component
public class RedisTransaction {
@Resource
private RedissonClient redissonClient;
public RTransaction getTransaction() {
RTransaction transaction = redissonClient.createTransaction(TransactionOptions.defaults());
Assert.notNull(transaction, "transaction is null");
return transaction;
}
public RBucket getTransactionBucket(String name) {
RBucket bucket = this.getTransaction().getBucket(name, StringCodec.INSTANCE);
Assert.notNull(bucket, "bucket is null");
return bucket;
}
public void commit(RTransaction transaction) {
transaction.commit();
}
public void commitAsync(RTransaction transaction) {
transaction.commitAsync();
}
public void rollback(RTransaction transaction) {
transaction.rollback();
}
public void rollbackAsync(RTransaction transaction) {
transaction.rollbackAsync();
}
}
单元测试:
package com.demo.redis.transaction;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.redisson.api.RBucket;
import org.redisson.api.RTransaction;
import org.redisson.client.codec.StringCodec;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
@Slf4j
@SpringBootTest
@RunWith(SpringRunner.class)
public class RedisTransactionTest {
private static final String NAME = "demo:redisTransaction";
@Resource
private RedisTransaction redisTransaction;
@Test
public void test() {
// 创建事务
RTransaction transaction = redisTransaction.getTransaction();
try {
// 执行事务的命令
RBucket bucket = transaction.getBucket(NAME);
bucket.set("value");
// 或者
transaction.getBucket(NAME, StringCodec.INSTANCE).set("value");
transaction.getMap(NAME).put("key", "value");
// 提交事务
transaction.commit();
} catch (Exception ex) {
log.error("", ex);
// 异常回滚
transaction.rollback();
}
}
}



