Redis中常见缓存问题解析

Redis是一个具有较高性能的key-value型数据库,Redis通过RDB周期性的将内存中的数据以快照的形式存入硬盘中,以此达到持久化的目的。在此解析一下Redis缓存中常见的四个问题:缓存预热、缓存雪崩、缓存穿透、缓存降级

缓存预热

当用户查询一个数据时,会先到数据库进行查询,再将查询到的数据进行缓存。为了避免这个问题,在用户查询前就将缓存数据加载到缓存系统中,这样用户查询时就能直接进入我们预热的缓存数据。
常用两种方法更新过期的缓存数据:
1).用户查询请求发送后,检查该数据缓存是否过期,如果过期,则进入数据库查询并将查询结果更新到缓存
优点:不用处理大量的缓存数据
缺点,每次用户请求查询数据时,都要进行过期判断,效率较低
2).定时更新所有的缓存数据
优点:用户查询效率更高
缺点:处理大量的缓存数据

缓存雪崩

Redis中我们可以自定义设置缓存的过期时间。缓存雪崩的情况就是我们将大部分缓存数据的过期时间设置为一样的,当这大部分缓存过期而新缓存未更新时,用户数据请求就会直接进到数据库中,大量的请求就有可能造成数据库的崩溃。
处理方法:
在算法层面处理(例如队列),代码层面处理(例如线程同步)来避免同时多个请求进入数据库的情况。最直接的方法就是不要将大部分缓存数据的过期时间设为一样的。

缓存穿透

这种情况是指,用户查询一个数据库中不存在的数据时,会先进入缓存数据中查询,查询不到后进入数据库查询,最后返回一个空的查询结果的情况。两次查询在大量请求的时候会降低我们的数据查询效率,常见解决方法如下:
将所有现存数据存入一个map结构中(例如HashMap),用户每次请求时,先在该map中检查有无该数据,如果没有,则将该请求拦截。这就避免了空查询请求进入数据库的情况。

缓存降级

当系统服务出现错误或崩溃时,或者一些非核心功能影响到整个系统的运行时,通过降级可以保证核心功能的正常运行。降级处理可以人工自定义,也可以根据一些关键数据进行自动降级。
网络波动等情况造成的系统服务超时时,可设置自动降级
一些服务出现小概率的错误现象,可设置自动降级或人工降级
当大量用户涌入系统造成系统到达处理极限时,可设置自动降级或人工降级
系统出现重大错误时,为避免Redis故障或缓存雪崩情况,可拦截请求进入数据库,发送警告信息给用户

原创文章 12 获赞 51 访问量 5835

猜你喜欢

转载自blog.csdn.net/weixin_44582716/article/details/105376352
今日推荐