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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 什么是activity的生命周期_activity切换生命周期

    什么是activity的生命周期_activity切换生命周期Activity生命周期,英文名也叫activity_lifecycle。Activity状态每个Activity在其生命周期内可能会有哪几种状态吗?没错,一共有运行状态、暂停状态、停止状态和销毁状态这4种。运行状态当一个Activity位于返回栈的栈顶时,Activity就处于运行状态。系统最不愿意回收的就是处于运行状态的Activity,因为这会带来非常差的用户体验。暂停状态当一个Activity不再处于栈顶位置,但仍然可见时,Activity就进入了暂停状态。你可能会觉得,既然Activi

    2022年8月16日
    5
  • 毕设代做正规平台_毕设代做被发现会不毕业吗

    毕设代做正规平台_毕设代做被发现会不毕业吗在mac自建一套【学员管理系统】

    2026年2月3日
    27
  • nginx和apache、lvs区别

    nginx和apache、lvs区别对比项apachenginx简介配置简洁。负载均衡服务器,支持7层负载均衡内存及资源占用多轻量级,同样的web服务占用少稳定性超稳定不稳定,bug多进程同步进程模型异步进程模型(抗并发)处理静态文件性能好(3倍以上)性能差对PHP支持简单需要配合其他后端用rewrite功能性能好(rewrite频繁时用apache)性能差结合机制后端apache集群前端nginx抗并发Nginx轻量级,采…

    2022年6月14日
    29
  • Android中联系人使用

    我8月份的时候接触过联系人这里,看了很多文章,把我弄蒙了,今天突然发现这篇文章,不错,如果我以后涉及到这方面的业务,会多来学习下,作者博客地址和英文原文地址都放在最下面了。前阵子搞短信,发现Android1.x至2.0版本联系人数据库很多地方做了更改,且关于这方面的资料也比较少,所以找到一篇文章稍作翻译了下,以供大家参考,该文将分三部分发布。WorkingWithAndro

    2022年4月8日
    41
  • python判断是否为空_python 判断对象是否为空

    python判断是否为空_python 判断对象是否为空在实际的工作当中,我们难免要与空值打交道,相信不少初学者都会写出下面的代码:ifaisNone:dosomething.else:dotheotherthing.python学习网,大量的免费python视频教程,欢迎在线学习!这样写看起来不错,但实际上会有问题。一般来讲,Python中会把下面几种情况当做空值来处理:NoneFalse0,0.0,0L”,(),[],{}其中Non…

    2022年6月12日
    167
  • bs和cs架构的区别和优缺点_百年灵b1p1和b1x1区别

    bs和cs架构的区别和优缺点_百年灵b1p1和b1x1区别BS和CS架构的区别BS就是浏览器服务器架构(网站)CS就是需要安装的那些应用程序app二者比较:标准:BS开发更标准一些,因为CS需要在不同的系统上执行,BS只需要在浏览器上执行效率:CS效率更高,CS属于安装的软件,很多内容已经安装在电脑中了,只需要联网获取数据即可,而BS运行在浏览器上,所有的数据必须经过下载才能使用;升级:BS无缝升级,CS需要删除老版本,再安装新版本安全性:CS更为安全,因为必须安装软件才能使用;BS安全度较低,只要有浏览器就可以使用开发成本:CS开发成本更高

    2022年10月17日
    3

发表回复

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

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