利用spring-data-redis实现redis事务效果
运行环境:spring-boot-starter-data-redis 1.5.10RELEASE,jedis:2.9
其他配置,启动器器已经添加@EnableTransactionManagement注解
//配置类
@Configuration
public 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();
}
测试结果
问题:出现该情况的原因到底是什么????
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
spring-data-jpa在1.5的版本中没有该方法。只需要在配置template时开启对事务的支持即可。template.setEnableTransactionSupport(true);
Redis没有事务的概念,而且你的RedisTemplate对象bean是全局共享的,不可能通过顺序调用来保障事务性。想要原子执行多条命令,需要调用executePiplined并在回调中传入命令。
你上面的命令可以直接合并成一句:
配置中开启对事务的支持,redis默认单机支持事务,集群不支持