方法一、配置开启
1.引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
2. 编写配置文件
@Configuration
public class RedisConfig {
@Bean
public StringRedisTemplate StringRedisTemplate(RedisConnectionFactory factory) {
StringRedisTemplate template = new StringRedisTemplate(factory);
/**
* description 开启redis事务(仅支持单机,不支持cluster)
**/
template.setEnableTransactionSupport(true);
return template;
}
/**
* description 配置事务管理器
**/
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
}
}
3. 编写代码
@Service
public class RedisService {
@Autowired
StringRedisTemplate stringRedisTemplate;
@Autowired
RedisService redisService;
/**
* description 不带事务写入
**/
public void put(String key,String value){
stringRedisTemplate.opsForValue().set(key,value);
}
/**
* description 带事务写入
**/
@Transactional(rollbackFor = Throwable.class)
public void putWithTx(String key,String value){
stringRedisTemplate.opsForValue().set(key,value);
}
}
方法二、代码实现
redis事物关键命令:
MULTI、EXEC、DISCARD 、 WATCH
1.MULTI 开启事务,总是返回OK
2.EXEC 提交事务
3.DISCARD 放弃事务(即放弃提交执行)
4.WATCH 监控
5.QUEUED 命令加入执行的队列,没操作一个动作的时候,都先加入Queue
根据上述命令,Redis 事务的执行过程包含三个步骤:
1.开启事务:MULTI
2.命令入队:QUEUE
3.执行事务或丢弃:EXEC 或者 DISCARD
@Autowired
private RedisTemplate redisTemplate;
public void test(){
try{
redisTemplate.execute(new SessionCallback() {
@Override
public Object execute(RedisOperations operations) throws DataAccessException {
//开启事务
operations.multi();
// 要执行的多个操作
operations.delete(finalsScoreKey);
backupsScores.forEach(t -> operations.opsForSet().add(finalsScoreKey, t));
//结束事务
return operations.exec();
}
});
}catch (Exception e){
System.out.println(e.getMessage());
}
}
方法三、Lua脚本实现
总结
方法一:
- 优点:简单粗暴。
- 缺点:如何你是一个小项目,方法一则会多引入两个依赖,导致jar包变大。
方法二:
511

被折叠的 条评论
为什么被折叠?



