Redis雪崩效应的解决方案(转)[通俗易懂]

Redis雪崩效应的解决方案(转)[通俗易懂]1、可以使用分布式锁单机版的话本地锁当突然有大量请求到数据库服务器时候,进行请求限制。使用所的机制,保证只有一个线程(请求)操作。否则进行排队等待(集群分布式锁,单机本地锁)。减少服务器吞吐量,效率低。保证只能有一个线程进入实际上只能有一个请求在执行查询操作也可以在此处进行使用限流的策略~2、缓存标记publicobjectGetProductListNew()…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

1、可以使用分布式锁 单机版的话本地锁

当突然有大量请求到数据库服务器时候,进行请求限制。使用所的机制,保证只有一个线程(请求)操作。否则进行排队等待(集群分布式锁,单机本地锁)。减少服务器吞吐量,效率低。
在这里插入图片描述
保证只能有一个线程进入 实际上只能有一个请求在执行查询操作

也可以在此处进行使用限流的策略~

2、缓存标记

public object GetProductListNew()
        {
            const int cacheTime = 30;
            const string cacheKey = "product_list";
            //缓存标记。
            const string cacheSign = cacheKey + "_sign";
            
            var sign = CacheHelper.Get(cacheSign);
            //获取缓存值
            var cacheValue = CacheHelper.Get(cacheKey);
            if (sign != null)
            {
                return cacheValue; //未过期,直接返回。
            }
            else
            {
                CacheHelper.Add(cacheSign, "1", cacheTime);
                ThreadPool.QueueUserWorkItem((arg) =>
                {
                    cacheValue = GetProductListFromDB(); //这里一般是 sql查询数据。
                    CacheHelper.Add(cacheKey, cacheValue, cacheTime*2); //日期设缓存时间的2倍,用于脏读。                
                });
                
                return cacheValue;
            }
        } 

3、消息中间件方式

如果大量的请求进行访问时候,Redis没有值的情况,会将查询的结果存放在消息中间件中(利用了MQ同步特性)
查不到时候 走MQ
MQ使用具体看 https://blog.csdn.net/VinceZxy/article/details/91582567

4、均摊分配Redis的key的失效时间

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/193953.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 群辉 Docker-x64-17.05.0-0400.spk,用来群晖洗白,安装ddsm使用

    群辉 Docker-x64-17.05.0-0400.spk,用来群晖洗白,安装ddsm使用链接:https://pan.baidu.com/s/1_J5uQTBmEolNT8T_9P6gLQ提取码:jyq8复制这段内容后打开百度网盘手机App,操作更方便哦

    2022年5月1日
  • EasyUI 时间格式化「建议收藏」

    EasyUI 时间格式化「建议收藏」方法1:formatter:function(value,row,index){                           var unixTimestamp = new Date(value);                           return unixTimestamp.toLocaleString();                           }方法2…

    2022年5月12日
  • 常用牛人主页链接(计算机视觉、模式识别、机器学习相关方向,陆续更新。。。。)【转】…

    常用牛人主页链接(计算机视觉、模式识别、机器学习相关方向,陆续更新。。。。)【转】…

    2022年3月4日
  • kettle工具使用一二三[通俗易懂]

    kettle工具使用一二三[通俗易懂]1:关于ID生成器。如果一个转化流程里的两个分支分别使用了GenerateID组件,请注意“计数器名称”,这个很重要。1)如果改名字不同,则最总汇总结果中的id是会分别生成的,也就是说会出现重复的id。2)如果名字相同,最终结果中id是不会重复的。2:关于序列生成器首先抱歉,上面所说的“GenerateID“组件,其实指的就是序列生成器。kettle5.3中包含两个序列生成器组件,一个…

    2022年10月12日
  • HTTP 400 Bad request 原因

    HTTP 400 Bad request 原因声明转自:HTTP400Badrequest原因正文我的代码部署在Linux测试环境,我在使用 HttpClient 发送http请求时遇到问题,请求报400Ba

    2022年7月3日
  • 电赛练习之旋转倒立摆

    电赛练习之旋转倒立摆2019年电赛已经结束,虽然结果不能令人满意,但闲下来,还是总结一下电赛学到的东西与失败的地方。这一次先来谈一下一阶旋转倒立摆。一、题目分析:拿到一道题目,其实最应该做的事情是分析题目,因为我们往往可以发现某些发挥题是在基础题的基础上进行的,但是,可能某些发挥题需要在基础题的基础上修改结构,我们也可以发现,题目中的某些问题具有相似性,当我们合并同类项的时候,可以把题目的要求变得简单。一下,我粘…

    2022年8月18日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号