seckill
seckill copied to clipboard
这里是否存在并发问题?
public Exposer exportSeckillUrl(long seckillId) { // 优化点:缓存优化:超时的基础上维护一致性 //1:访问redis Seckill seckill = redisDao.getSeckill(seckillId); if (seckill == null) { //2:访问数据库 seckill = seckillDao.queryById(seckillId); if (seckill == null) { return new Exposer(false, seckillId); } else { //3:放入redis redisDao.putSeckill(seckill); } }
这里在并发的时候,是不是会出现多次查询数据库,多次更新redis? 谢谢~
在高并发的情况下会出现,不过这个不会引起什么问题。
在 2016-11-05 11:51:35,"yezhwi" [email protected] 写道:
public Exposer exportSeckillUrl(long seckillId) { // 优化点:缓存优化:超时的基础上维护一致性 //1:访问redis Seckill seckill = redisDao.getSeckill(seckillId); if (seckill == null) { //2:访问数据库 seckill = seckillDao.queryById(seckillId); if (seckill == null) { return new Exposer(false, seckillId); } else { //3:放入redis redisDao.putSeckill(seckill); } }
这里在并发的时候,是不是会出现多次查询数据库,多次更新redis? 谢谢~
— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or mute the thread.
这个并发情况下会引起重复调用seckillDao.queryById,这个操作本事是primary key查询很快,且重复更新redis是幂等操作,可以忽略。如果是比较耗时的操作且有瞬时峰值流量,可以考虑mutex,见文档:https://timyang.net/programming/memcache-mutex/