Redis提供了高性能的数据存取的功能,有效的提升业务应用的响应速度,避免高并发大压力请求发送到数据层

但是Redis做缓存时候出现了问题,比如缓存失效,大量的请求就会积压到数据库层,必然给数据库带来大量的压力,很有可能会导致数据库宕机

那么我们就需要明确缓存的一系列情况,包括工作原理 替换策略 异常处理和扩展机制,以及相对应的处理方式

首选需要说明Redis的工作原理,并明确Redis缓存处理请求的几种情况

常见的情况有两种

1.缓存命中:Redis中有相对应的数据,就可以直接读取Redis

2.缓存缺失:Redis中没有相对应的数据,就从后端数据库中读取数据,性能就会变慢,一旦缓存发生了缺失,就需要将缺失的数据写入Redis,这个过程叫做缓存更新

图片

而上述的整体流程,需要一个应用作为桥梁将其连接起来

所以在使用Redis缓存的时候,需要在应用程序中增加三个方面的代码

在应用程序需要读取数据的时候,需要显式的调用Redis的Get接口,

缓存缺失了,需要和数据库连接,从数据库中读取

在缓存中数据需要更新的时候,将更新后的数据写入缓存

再说完了Redis处理缓存请求的几种情况

那么Redis中缓存数据,即可从Redis缓存中只查询,而不负责修改,或者从Redis中修改,后来同步到数据库中,根据着两种缓存的类型,分为了只读缓存和读写缓存

只读缓存在实际应用中

如果应用需要读取数据,会先调用Redis Get 接口,检查是否在Redis中存在,然后所有的写请求,都发往后端的数据库,数据库中修改完成后,将Redis中相关的数据删除掉

再次读取数据的时候,再次发生缓存缺失,应用会将数据从数据库中读出,并写入缓存,那么数据再次被读取就可以直接从缓存拿了

读写缓存,则是无论读还是写,都是将其放在Redis中操作,对于上层的业务应用直接读取Redis,数据操作速度及其快速,但是Redis是内存数据库,可能出现掉电或者宕机的情况,出现了就存在数据丢失的风险,这就是说,应用的最新数据可能会丢失,给应用业务带来风险

为了避免这种风险,一般还提供了两种后续的数据操作,分别是在Redis操作之后去操作后端数据库,等到两者都处理完成,才给客户端返回数据,这样缓存宕机或者发生故障,最新的数据都会保存在数据库,保证数据库可靠性,但是也因为增加了数据库的写入,导致增加了响应延迟

第二种则是将写请求放入了缓存,然后在合适的实际,利用不同的方式写回后端数据库,避免出现掉电之后的数据丢失

整体如同下面

图片

但是需要注意的是只读缓存就和数据库的缓存层一样,作用不大,很有可能很快就被淘汰了

发表评论

邮箱地址不会被公开。 必填项已用*标注