seckill icon indicating copy to clipboard operation
seckill copied to clipboard

这里是否存在并发问题?

Open yezhwi opened this issue 8 years ago • 2 comments

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? 谢谢~

yezhwi avatar Nov 05 '16 03:11 yezhwi

在高并发的情况下会出现,不过这个不会引起什么问题。

在 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.

RichardTibco avatar Dec 08 '16 16:12 RichardTibco

这个并发情况下会引起重复调用seckillDao.queryById,这个操作本事是primary key查询很快,且重复更新redis是幂等操作,可以忽略。如果是比较耗时的操作且有瞬时峰值流量,可以考虑mutex,见文档:https://timyang.net/programming/memcache-mutex/

geekyijun avatar Feb 08 '17 14:02 geekyijun