并发经验八年架构师:带你轻松解决缓存在高并发场景下的问题( 二 )

----并发经验八年架构师:带你轻松解决缓存在高并发场景下的问题//---- http://


缓存一致性问题

当数据时效性要求很高时 , 需要保证缓存中的数据与数据库中的保持一致 , 而且需要保证缓存节点和副本中的数据也保持一致 , 不能出现差异现象 。 这就比较依赖缓存的过期和更新策略 。 一般会在数据发生更改的时 , 主动更新缓存中的数据或者移除对应的缓存 。

缓存并发问题

缓存过期后将尝试从后端数据库获取数据 , 这是一个看似合理的流程 。 但是 , 在高并发场景下 , 有可能多个请求并发的去从数据库获取数据 , 对后端数据库造成极大的冲击 , 甚至导致 “雪崩”现象 。 此外 , 当某个缓存key在被更新时 , 同时也可能被大量请求在获取 , 这也会导致一致性的问题 。 那如何避免类似问题呢?我们会想到类似“锁”的机制 , 在缓存更新或者过期的情况下 , 先尝试获取到锁 , 当更新或者从数据库获取完成后再释放锁 , 其他的请求只需要牺牲一定的等待时间 , 即可直接从缓存中继续获取数据 。

推荐阅读