赞
踩
1. 三种策略:
public void write(String key,Object data){
redis.delKey(key); //先淘汰缓存
db.updateData(data); //再写数据库(这两步和原来一样)
Thread.sleep(1000); //休眠1秒
redis.delKey(key); //再次淘汰缓存
}
2.1 问题1:那么,这个1秒怎么确定的,具体该休眠多久呢?
2.2 问题2:如果你用了mysql的读写分离架构怎么办?
3.1 问题1:采用这种同步淘汰策略,吞吐量降低怎么办?
3.2 问题2:第二次删除,如果删除失败怎么办?
这是个非常好的问题,因为第二次删除失败,就会出现如下情形。还是有两个请求,一个请求A进行更新操作,另一个请求B进行查询操作,为了方便,假设是单库:
ok,这也就是说。如果第二次删除缓存失败,会再次出现缓存和数据库不一致的问题。
如何解决呢?
问题1:这种情况不存在并发问题么?
3.1异步删除失败的解决方案:
方案一:
方案二:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。