Redis之缓存雪崩问题解决方案

Redis之缓存雪崩问题解决方案

  • 一、介绍
  • 二、解决方法
    • [1. 锁](#1. 锁)
    • [2. 不同的过期时间](#2. 不同的过期时间)
    • [3. 缓存预热和定时任务](#3. 缓存预热和定时任务)

一、介绍

缓存雪崩,指大量的缓存失效,大量的请求又同时落在数据库。主要的一种诱因是key设置的过期时间都一样。

二、解决方法

1. 锁

加锁,每次只让一个线程可以访问数据库,随后存入缓存。性能太差。

2. 不同的过期时间

最简单有效的解决办法是设置不同的过期时间。比如

java 复制代码
int timeout = 10 + new Random().nextInt(20);
redisTemplate.opsForValue().set(key, JSON.toJSONString(coursePublish), timeout, TimeUnit.SECONDS);

3. 缓存预热和定时任务

使用缓存预热,把数据提前放入缓存,然后根据过期时间,发布合理的定时任务,主动去更新缓存。

缓存预热参考代码如下。

java 复制代码
@Component
public class RedisHandler implements InitializingBean {
    @Autowired
    RedisTemplate redisTemplate;
    @Autowired
    CoursePublishMapper coursePublishMapper;

    @Override
    public void afterPropertiesSet() throws Exception {
        List<CoursePublish> coursePublishList = coursePublishMapper.selectList(new LambdaQueryWrapper<CoursePublish>());
        //缓存预热
        coursePublishList.forEach(coursePublish -> {
            String key = "content:course:publish:" + coursePublish.getId();
            redisTemplate.opsForValue().set(key, JSON.toJSONString(coursePublish));
        });
    }
}
相关推荐
拽着尾巴的鱼儿14 分钟前
Spring定时任务 Scheduled使用
java·后端·spring
victory043123 分钟前
梯度计算 反向传播会不会缓存loss的求导公式
缓存·自动微分·深度学习系统
江君是实在人43 分钟前
java 面试题 redis 处理大key问题
java·开发语言·redis
醇氧1 小时前
Spring WebFlux 学习
java·学习·spring
浮生醉清风i3 小时前
Spring Ai
java·人工智能·spring
拽着尾巴的鱼儿3 小时前
Spring:定时任务@Scheduled cron 的实现原理
java·后端·spring
东方轧线3 小时前
给 AI 安装高速缓存:实战 MCP 对接 Redis,实现热点数据的毫秒级读取与状态共享
数据库·人工智能·redis
L.EscaRC4 小时前
深度解析 Spring 框架核心代理组件 MethodProxy.java
java·开发语言·spring
Jia ming4 小时前
ARM多核处理器缓存一致性全解析
arm开发·缓存
拽着尾巴的鱼儿4 小时前
Spring 缓存 @Cacheable 实现原理
java·spring·缓存