运行环境:spring-boot-starter-data-redis 1.5.10RELEASE,jedis:2.9其他配置,启动器器已经添加 @EnableTransactionManagement 注解//配置类@Configurationpublic class RedisConfig { @Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
RedisTemplate<String,Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(factory);
template.setKeySerializer(new StringRedisSerializer()); //实例化字符串
template.setValueSerializer(new StringRedisSerializer()); return template;
}
}测试代码@Autowired
private RedisTemplate redisTemplate; @Test
@Transactional(rollbackFor = Exception.class)
public void test() { redisTemplate.multi(); redisTemplate.opsForValue().setIfAbsent("pxl","wxb1"); redisTemplate.expire("pxl",100, TimeUnit.SECONDS); redisTemplate.discard(); //redisTemplate.exec();
}测试结果
2 回答
慕容3067478
TA贡献1773条经验 获得超3个赞
Redis没有事务的概念,而且你的RedisTemplate对象bean是全局共享的,不可能通过顺序调用来保障事务性。想要原子执行多条命令,需要调用executePiplined并在回调中传入命令。
你上面的命令可以直接合并成一句:
if (redisTemplate.opsForValue().setIfAbsent("px1","wxb1",100, TimeUnit.SECONDS)) { //执行成功的逻辑 }
江户川乱折腾
TA贡献1851条经验 获得超5个赞
template.setEnableTransactionSupport(true);
配置中开启对事务的支持,redis默认单机支持事务,集群不支持
- 2 回答
- 0 关注
- 175 浏览
添加回答
举报
0/150
提交
取消