運行環(huán)境:spring-boot-starter-data-redis 1.5.10RELEASE,jedis:2.9其他配置,啟動器器已經(jīng)添加 @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();
}測試結(jié)果
2 回答

慕容3067478
TA貢獻1773條經(jīng)驗 獲得超3個贊
Redis沒有事務(wù)的概念,而且你的RedisTemplate對象bean是全局共享的,不可能通過順序調(diào)用來保障事務(wù)性。想要原子執(zhí)行多條命令,需要調(diào)用executePiplined并在回調(diào)中傳入命令。
你上面的命令可以直接合并成一句:
if (redisTemplate.opsForValue().setIfAbsent("px1","wxb1",100, TimeUnit.SECONDS)) { //執(zhí)行成功的邏輯 }

江戶川亂折騰
TA貢獻1851條經(jīng)驗 獲得超5個贊
template.setEnableTransactionSupport(true);
配置中開啟對事務(wù)的支持,redis默認(rèn)單機支持事務(wù),集群不支持
- 2 回答
- 0 關(guān)注
- 237 瀏覽
添加回答
舉報
0/150
提交
取消