缓存特征
一个系统中的不同层之间的访问速度不一样,所以我们才需要缓存,这样就可以把一些需要频繁访问的数据放在缓存中,以加快它们的访问速度。
计算机系统中的三层存储结构,以及它们各自的常用容量和访问性能
计算机系统中,默认有两种缓存:
- CPU 里面的末级缓存,即 LLC,用来缓存内存中的数据,避免每次从内存中存取数据;
- 内存中的高速页缓存,即 page cache,用来缓存磁盘中的数据,避免每次从磁盘中存取数据。
两个特征
- 在一个层次化的系统中,缓存一定是一个快速子系统,数据存在缓存中时,能避免每次从慢速子系统中存取数据。
- 缓存系统的容量大小总是小于后端慢速系统的,我们不可能把所有数据都放在缓存系统中。
缓存处理请求的两种情况
- 缓存命中:Redis 中有相应数据,就直接读取 Redis,性能非常快。
- 缓存缺失:Redis 中没有保存相应数据,就从后端数据库中读取数据,性能就会变慢。 而且,一旦发生缓存缺失,为了让后续请求能从缓存中读取到数据,我们需要把缺失的 数据写入 Redis,这个过程叫作缓存更新。
缓存的类型
只读缓存
只读缓存直接在数据库中更新数据的好处是,所有最新的数据都在数据库中,而数据库是
提供数据可靠性保障的,这些数据不会有丢失的风险。当我们需要缓存图片、短视频这些
用户只读的数据时,就可以使用只读缓存这个类型了。
读写缓存
-
同步直写是指,写请求发给缓存的同时,也会发给后端数据库进行处理,等到缓存和数据
库都写完数据,才给客户端返回。这样,即使缓存宕机或发生故障,最新的数据仍然保存
在数据库中,这就提供了数据可靠性保证。 -
异步写回策略,则是优先考虑了响应延迟。此时,所有写请求都先在缓存中处理。等到
这些增改的数据要被从缓存中淘汰出来时,缓存将它们写回后端数据库。这样一来,处理
这些数据的操作是在缓存中进行的,很快就能完成。只不过,如果发生了掉电,而它们还
没有被写回数据库,就会有丢失的风险了。不过,同步直写会降低缓存的访问性能,这就增加了缓存的响应延迟。
同步直写模式侧重于保证数据可靠性,而异步写回模式 则侧重于提供低延迟访问
关于是选择只读缓存,还是读写缓存,主要看我们对写请求是否有加速的需求。
- 如果需要对写请求进行加速,我们选择读写缓存;
- 如果写请求很少,或者是只需要提升读请求的响应速度的话,我们选择只读缓存。
</article>