運行環境: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 關注
- 217 瀏覽
添加回答
舉報
0/150
提交
取消