@Service
public class RedisWatchService {
private final RedisTemplate<String, String> redisTemplate;
public RedisWatchService(RedisConnectionFactory connectionFactory) {
this.redisTemplate = new RedisTemplate<>();
this.redisTemplate.setConnectionFactory(connectionFactory);
this.redisTemplate.setKeySerializer(new StringRedisSerializer());
this.redisTemplate.setValueSerializer(new StringRedisSerializer());
this.redisTemplate.afterPropertiesSet();
}
public void watchAndExecuteTransaction(String keyToWatch, String value) {
//这个对象一次被一个线程调用,所有操作redisTemplate都必须放在这个
SessionCallback<List> sessionCallback = new SessionCallback() {
@Override
public Object execute(RedisOperations redisOperations) throws DataAccessException {
redisTemplate.watch(keyToWatch);
String status = redisTemplate.opsForValue().get(keyToWatch);
if (status == null) {
System.out.println("没数据!");
return null;
}
if (Integer.valueOf(status).equals(2)) {
System.out.println("已经退款成功!");
return null;
}
if (Integer.valueOf(status).equals(3)) {
System.out.println("申请退款成功!");
return null;
}
//开启事务
redisOperations.multi();
redisOperations.opsForValue().set(keyToWatch, value);
//执行事务
List exec = redisOperations.exec();
return exec;
}
};
redisTemplate.multi();
//提交事务
List execute = (List) redisTemplate.execute(sessionCallback);
if (execute == null || execute.size() == 0) {
System.out.println("失败");
} else {
System.out.println("成功");
}
}
}
02-17
1628
07-13
1808
07-05
6155