缓存的特征
首先,一个系统不同层的访问速度不一样,我们才需要缓存。
这样就可以把一些需要频繁访问的数据放在缓存中,以加快它们的访问速度。例如:
计算机系统中,默认有两种缓存:
CPU 里面的末级缓存,即 LLC,用来缓存内存中的数据,避免每次从内存中存取数据;内
存中的高速页缓存,即 page cache,用来缓存磁盘中的数据,避免每次从磁盘中存取数据。
缓存两大特征:
在一个层次化的系统中,缓存一定是一个快速子系统,数据存在缓存中时,能避免每次从慢速子系统中存取数据。
缓存系统的容量大小总是小于后端慢速系统的,我们不可能把所有数据都放在缓存系统中。
redis缓存处理请求的方式
缓存命中:
Redis 中有相应数据,就直接读取 Redis,性能非常快。
缓存缺失:
Redis 中没有保存相应数据,就从后端数据库中读取数据,性能就会变慢。而且,一旦发生缓存缺失,为了让后续请求能从缓存中读取到数据,我们需要把缺失的数据写入 Redis,这个过程叫作缓存更新。
redis缓存类型
只读缓存
当redis用作只读缓存时,读请求会先在缓存中查看数据是否存在。而写请求则全部交给数据库,在数据库中增删改,对于删除的数据来说,如果redis已经缓存了相应的数据,应用需要把这些缓存的数据删除,redis中就没有这些数据了。
只读缓存好处是,保证了最新的数据在数据库里面,数据库有可靠性保障,数据更安全。
读写缓存
对于读写缓存来说,除了读请求会发送到缓存进行处理(直接在缓存中查询数据是否存在),所有的写请求也会发送到缓存,在缓存中直接对数据进行增删改操作。
但是,和只读缓存不一样的是,在使用读写缓存时,最新的数据是在 Redis 中,而 Redis 是内存数据库,一旦出现掉电或宕机,内存中的数据就会丢失。这也就是说,应用的最新数据可能会丢失,给应用业务带来风险。
因此它提供了两个策略
-
同步直写,写请求发给缓存的同时,也会发给后端数据库进行处理,等到缓存和数据库都写完数据,才给客户端返回。
-
异步写回,所有写请求都先在缓存中处理。等到这些增改的数据要被从缓存中淘汰出来时,缓存将它们写回后端数据库。