参考文章 http://www.javashuo.com/article/p-qadiunjd-dt.html数据库
缓存适用于读多写少的场景,而且能极大地提高性能和效率;可是让缓存的数据与数据库保持一致是一个难题缓存
不考虑策略1,如下将深刻探究策略2并发
在高并发的状况下,假设请求1(更新操做)先删除缓存,再更新数据库,若是请求2(读操做)在缓存删除与数据库更新之间进行了读取数据,就会读入旧数据到缓存,待数据库更新后,此时旧数据缓存与数据库发生不一致的现象负载均衡
该问题的核心是,请求1的操做不能被其余请求打断,而且请求1与其余请求之间要保持有序(串行执行)。遇到这种状况,能够采用队列的方式去解决(为了保证串行执行,工做线程只能有1个),当出现更新请求时,直接将其丢进队列,等待异步执行;当出现读请求时,先读缓存,成功则返回,若是缓存不存在,再去判断队列头部是不是同一条记录的更新请求,若是是,为了避免打断其操做,将读请求也丢进队列,而后同步等待缓存更新完成;若是不是,说明该更新请求早已完成,直接读数据库并缓存便可,不要入队列。异步