Redis之缓存击穿问题解决方案

一、书接上文

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

二、介绍

缓存击穿就是大量并发访问同一个热点数据,一旦这个热点数据缓存失效,则请求压力都来到数据库。

三、解决方案

1. 单例双检锁

	@Override
    public CoursePublish getCoursePublishCache(Long courseId) {
   
        String key = "content:course:publish:" + courseId;
        //布隆过滤器
        boolean contains = bloomFilter.contains(key);
        if (!contains){
   
            return null;
        }
        //先查询redis
        Object object = redisTemplate.opsForValue().get(key);
        if (object != null){
   
            String string = object.toString();
            CoursePublish coursePublish = JSON.parseObject(string, CoursePublish.class);
            return coursePublish;
        }else {
   
            //后查询数据库
            //加锁,防止缓存击穿
            synchronized (this){
   
                //单例双检锁
                object = redisTemplate.opsForValue().get(key);
                if (object != null){
   
                    String string = object.toString();
                    CoursePublish coursePublish = JSON.parseObject(string, CoursePublish.class);
                    return coursePublish;
                }
                CoursePublish coursePublish = getCoursePublish(courseId);
                if (coursePublish != null) {
   
                	bloomFilter.add(key);
                    redisTemplate.opsForValue().set(key, JSON.toJSONString(coursePublish));
                } else {
   
                    int timeout = 10 + new Random().nextInt(20);
                    redisTemplate.opsForValue().set(key, JSON.toJSONString(coursePublish), timeout, TimeUnit.SECONDS);
                }
                return coursePublish;
            }
        }
    }

2. 缓存预热和定时任务

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

在这里插入图片描述

相关推荐

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

    2024-02-23 08:56:01       29 阅读

最近更新

  1. TCP协议是安全的吗?

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

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

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

    2024-02-23 08:56:01       20 阅读

热门阅读

  1. LeetCode //C - 901. Online Stock Span

    2024-02-23 08:56:01       33 阅读
  2. haproxy集成国密ssl功能

    2024-02-23 08:56:01       34 阅读
  3. vivado RAM Inference

    2024-02-23 08:56:01       27 阅读
  4. nifi连接Sql server数据库报错TLS问题

    2024-02-23 08:56:01       37 阅读
  5. C++程序设计学习笔记(二)

    2024-02-23 08:56:01       28 阅读