decr方法 在余额扣减db数据没有同步??
来源:11-19 本章回顾

慕少4057723
2024-02-10
缓存操作 return result > 0; 这里直接return了, 无法去执行consumeDecrDBHandler,造成缓存和db 不一致了 ??
public boolean decr(long userId, int num) {
//扣减余额
String cacheKey = cacheKeyBuilder.buildUserBalance(userId);
if (redisTemplate.hasKey(cacheKey)) {
//基于redis的扣减操作
Long result = redisTemplate.opsForValue().decrement(cacheKey, num);
redisTemplate.expire(cacheKey, 5, TimeUnit.MINUTES);
return result > 0;
}
threadPoolExecutor.execute(new Runnable() {
@Override
public void run() {
//分布式架构下,cap理论,可用性和性能,强一致性,柔弱的一致性处理
//在异步线程池中完成数据库层的扣减和流水记录插入操作,带有事务
consumeDecrDBHandler(userId, num);
}
});
return false;
}
写回答
1回答
-
有个定时任务,定时将redis中的内容同步到mysql
112024-02-11
相似问题