栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

四、缓存雪崩

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

四、缓存雪崩

缓存雪崩
  • 一、题目
  • 二、缓存雪崩
  • 三、如何解决缓存雪崩
    • 3.1、针对 Redis 服务不可用的情况
    • 3.2、针对热点缓存失效的情况
      • 1、设置不同的失效时间
      • 2、加互斥锁
      • 3、缓存永不失效;
      • 4、双层缓存策略

一、题目

大量 key 同时到达过期时间有哪些影响

二、缓存雪崩

缓存在同一时间大面积的失效,后面的请求都直接落到了数据库上,造成数据库短时间内承受大量请求;

三、如何解决缓存雪崩 3.1、针对 Redis 服务不可用的情况
  • 采用 Redis 集群,避免单机出现问题整个缓存服务都没办法使用;
  • 限流,避免同时处理大量的请求;

3.2、针对热点缓存失效的情况 1、设置不同的失效时间

比如,随机设置缓存的失效时间

2、加互斥锁

同一时间只让一个线程构建缓存,其他线程阻塞排队等待回写缓存线程执行完,重新读缓存即可

public String getData(String key) {
    // 从缓存获取数据
    String result = getDataFromRedis(key);
    if (result == null) {
        // 去获取锁,获取锁成功,去数据库读取数据
        if (lock.tryLock()) {
            // 从数据库获取数据
            result = getDataFromMySQL(key);
            if (result != null) {
                setDataToCache(key, result);
            }
            // 释放锁
            lock.unlock();
        } else {
            Thread.sleep(100);
            result = getData(key);
        }
    }
    return result;
}
3、缓存永不失效;

缓存在物理上永远不过期,用一个异步的线程更新缓存

4、双层缓存策略

使用主备两层缓存:

  • 主缓存:有效期按照经验值设置,设置为主读取的缓存,主缓存失效后从数据库加载最新值
  • 备份缓存:有效期长,获取锁失败时读取的缓存,主缓存更新时需要同步更新备份缓存

建立备份缓存,缓存 A 和缓存 B,A 设置超时时间,B 不设值超时时间,先从 A 读缓存,A 没有读 B,并且更新 A 缓存和 B 缓存


转载请标明出处,原文地址:https://blog.csdn.net/weixin_41835916 如果觉得本文对您有帮助,请点击支持一下,您的支持是我写作最大的动力,谢谢。

暑期编程PK赛 得CSDN机械键盘等精美礼品!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1017631.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号