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回答

Danny_Idea

2024-02-11

有个定时任务,定时将redis中的内容同步到mysql

1
1
慕少4057723
嗯 好的 谢谢
2024-02-11
共1条回复

SpringCloudAlibaba高并发仿斗鱼直播平台实战

SpringCloudAlibaba高并发仿斗鱼直播平台实战

421 学习 · 344 问题

查看课程