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

一、书接上文

Redis之缓存穿透问题解决方案实践SpringBoot3+Docker

二、介绍

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

三、解决方案

1. 锁

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

2. 不同的过期时间

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

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

3. 缓存预热和定时任务

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

@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));
        });
    }
}

至于定时任务,可以使用xxl-job。具体使用方法,可以参考这个文章
Docker部署xxl-job调度器并结合SpringBoot测试

在这里插入图片描述

相关推荐

  1. Redis缓存雪崩问题解决方案

    2024-02-22 01:56:03       29 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-22 01:56:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-22 01:56:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-22 01:56:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-22 01:56:03       20 阅读

热门阅读

  1. 编程笔记 Golang基础 010 常量和变量

    2024-02-22 01:56:03       30 阅读
  2. YOLOV8改进系列指南

    2024-02-22 01:56:03       33 阅读
  3. C++程序设计学习笔记(一)

    2024-02-22 01:56:03       24 阅读
  4. 【开源软件的影响力有多大?】

    2024-02-22 01:56:03       30 阅读
  5. 让图片说话SadTalker

    2024-02-22 01:56:03       33 阅读
  6. 嵌入式学习day22 Linux

    2024-02-22 01:56:03       28 阅读
  7. Linux--shell编程中的for循环

    2024-02-22 01:56:03       35 阅读
  8. SQL 和 NoSQL 有什么区别?

    2024-02-22 01:56:03       24 阅读
  9. 【菜鸡常见网络问题汇总】之:ARP详解

    2024-02-22 01:56:03       37 阅读