Redis缓存避免缓存雪崩、缓存击穿、缓存并发问题解决实践方案

分布式缓存的意义在于缩短系统响应时间、提高系统并发、减轻DB存储压力。

正常情况下使用分布式缓存的流程如下图,业务请求进来时,先查询Redis,如果Redis中存在的话,直接返回Redis中结果;如果Redis中不存在的话,访问数据库。

缓存使用位置

在高并发场景,应该满足对Redis的相同查询,理想情况每次最多有一个请求通过,尽量保证减少数据库的访问压力。即Redis不仅仅作为缓存,也作为一个请求过滤器,对于相同的查询,只漏过一个请求对数据库操作。

缓存雪崩问题:
缓存雪崩问题是缓存在某一时刻同时失效,导致所有请求全部转到数据库中,增大数据库压力。

缓存击穿:
缓存击穿是指数据库中压根不存在某一数据,导致根本无法将结果缓存到数据库中,如果大量请求查询该不存在的数据,所有的请求将会全部打到数据库中,给数据库造成压力。

缓存并发问题
缓存并发问题是指在多个请求同时访问一个数据时,如果这个数据在Redis缓存中不存在,这多个请求将全部访问到数据库中,如果同一时刻大量这样的请求,将给数据库造成压力。

Redis解决缓存雪崩、缓存击穿、缓存并发问题实践方案:

在这里插入图片描述

此流程在程序逻辑上使用非一致失效时间避免缓存雪崩,当然也可以使用多缓存、备用缓存,但是程序逻辑是最有效的方式;通过锁和标记变量来避免缓存并发,在多请求同时访问同一数据时,设置锁,以阻挡其它线程访问,保证访问数据库只有一个请求进去,同时设置标记变量,表示当前数据正在被获取;通过设置标记变量
表明数据库中无该数据,当然这种方式需要跟数据库保持严格一致,在数据库变更时,对缓存进行更新。

猜你喜欢

转载自blog.csdn.net/qq_36101933/article/details/83414490