高频面试题:Cache Aside机制
Cache Aside机制是一种缓存更新策略,在不需要缓存和数据库强一致性的业务场景下,Cache Aside机制是首选方案。
读策略:
优先从缓存读取数据,如果缓存中命中数据直接返回数据;如果缓存中没有命中数据,那么就从数据库加载数据返回客户端并且保存数据到缓存中。
写策略:
首先更新数据库中的,然后再删除缓存中的数据。
Cache Aside存在的问题:
(1)线程A先读取数据,此时缓存未命中再去读取数据库中的数据20,恰好此时的CPU时间片使用完了。
(2)线程B执行更新操作操作,将数据库中的数据更新成21,然后删除缓存,此时B的CPU时间片使用完了,但是、线程A又获取CPU的时间片
(3)线程A将缓存的值更新成20,但是20 不是数据库中的最新值,造成了数据库和缓存中的数据不一致的问题。
发生缓存数据和数据库中数据不一致满足的无天性条件:1、读操作的数据缓存中无数据,这样才会去数据库中加载数据;2、读操作进行的同时,存在一个写操作;3、读操作的时长大于写操作的时长;4、读写操作并发的时候,读取的数据是旧值。
解决办法缓存和数据库数据不一致的办法:缓存双删方案
Cache Aside适用于多读写少的场景,不适合写多的场景,因为写多的场景下缓存会被频繁地清理,这样会对缓存的命中有一定的影响。