当前位置: 首页 > news >正文

Redis企业级问题及解决方案

1.1 缓存预热
    场景:“宕机”

    服务器启动后迅速宕机

    问题排查:

    1.请求数量较高,大量的请求过来之后都需要去从缓存中获取数据,但是缓存中又没有,此时从数据库中查找数据然后将数据再存入缓存,造成了短期内对redis的高强度操作从而导致问题

    2.主从之间数据吞吐量较大,数据同步操作频度较高

    解决方案:

    前置准备工作:


    1.日常例行统计数据访问记录,统计访问频度较高的热点数据

    2.利用LRU数据删除策略,构建数据留存队列例如:storm与kafka配合

    准备工作:


    1.将统计结果中的数据分类,根据级别,redis优先加载级别较高的热点数据

    2.利用分布式多服务器同时进行数据读取,提速数据加载过程

    3.热点数据主从同时预热


    实施:

    4.使用脚本程序固定触发数据预热过程

    5.如果条件允许,使用了CDN(内容分发网络),效果会更好

    总的来说:缓存预热就是系统启动前,提前将相关的缓存数据直接加载到缓存系统。避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题!用户直接查询事先被预热的缓存数据!

1.2 缓存雪崩
    场景:数据库服务器崩溃,一连串的场景会随之儿来

    1.系统平稳运行过程中,忽然数据库连接量激增

    2.应用服务器无法及时处理请求

    3.大量408,500错误页面出现

    4.客户反复刷新页面获取数据

    5.数据库崩溃

    6.应用服务器崩溃

    7.重启应用服务器无效

    8.Redis服务器崩溃

    9.Redis集群崩溃

    10.重启数据库后再次被瞬间流量放倒

    问题排查:

    1.在一个较短的时间内,缓存中较多的key集中过期

    2.此周期内请求访问过期的数据,redis未命中,redis向数据库获取数据

    3.数据库同时接收到大量的请求无法及时处理

    4.Redis大量请求被积压,开始出现超时现象

    5.数据库流量激增,数据库崩溃

    6.重启后仍然面对缓存中无数据可用

    7.Redis服务器资源被严重占用,Redis服务器崩溃

    8.Redis集群呈现崩塌,集群瓦解

    9.应用服务器无法及时得到数据响应请求,来自客户端的请求数量越来越多,应用服务器崩溃

    10.应用服务器,redis,数据库全部重启,效果不理想

    总而言之就两点:短时间范围内,大量key集中过期

    解决方案

    思路:
    1.更多的页面静态化处理
    2.构建多级缓存架构

    ​ Nginx缓存+redis缓存+ehcache缓存

    3.检测Mysql严重耗时业务进行优化

    ​ 对数据库的瓶颈排查:例如超时查询、耗时较高事务等

    4.灾难预警机制

    ​ 监控redis服务器性能指标

    ​ CPU占用、CPU使用率

    ​ 内存容量

    ​ 查询平均响应时间

    ​ 线程数

    5.限流、降级

    短时间范围内牺牲一些客户体验,限制一部分请求访问,降低应用服务器压力,待业务低速运转后再逐步放开访问

    落地实践:
    1.LRU与LFU切换

    2.数据有效期策略调整

    ​ 根据业务数据有效期进行分类错峰,A类90分钟,B类80分钟,C类70分钟

    ​ 过期时间使用固定时间+随机值的形式,稀释集中到期的key的数量

    3.超热数据使用永久key

    4.定期维护(自动+人工)

    ​ 对即将过期数据做访问量分析,确认是否延时,配合访问量统计,做热点数据的延时

    5.加锁:慎用!

    总的来说:缓存雪崩就是瞬间过期数据量太大,导致对数据库服务器造成压力。如能够有效避免过期时间集中,可以有效解决雪崩现象的 出现(约40%),配合其他策略一起使用,并监控服务器的运行数据,根据运行记录做快速调整。

1.3 缓存击穿
    场景:还是数据库服务器崩溃,但是跟之前的场景有点不太一样

    1.系统平稳运行过程中

    2.数据库连接量瞬间激增

    3.Redis服务器无大量key过期

    4.Redis内存平稳,无波动

    5.Redis服务器CPU正常

    6.数据库崩溃

    问题排查:

    1.Redis中某个key过期,该key访问量巨大

    2.多个数据请求从服务器直接压到Redis后,均未命中

    3.Redis在短时间内发起了大量对数据库中同一数据的访问

    总而言之就两点:单个key高热数据,key过期

    解决方案:

    1.预先设定

    ​ 以电商为例,每个商家根据店铺等级,指定若干款主打商品,在购物节期间,加大此类信息key的过期时长 注意:购物节不仅仅指当天,以及后续若干天,访问峰值呈现逐渐降低的趋势

    2.现场调整

    ​ 监控访问量,对自然流量激增的数据延长过期时间或设置为永久性key

    3.后台刷新数据

    ​ 启动定时任务,高峰期来临之前,刷新数据有效期,确保不丢失

    4.二级缓存

    ​ 设置不同的失效时间,保障不会被同时淘汰就行

    5.加锁

    ​ 分布式锁,防止被击穿,但是要注意也是性能瓶颈,慎重!

    总的来说:缓存击穿就是单个高热数据过期的瞬间,数据访问量较大,未命中redis后,发起了大量对同一数据的数据库访问,导致对数 据库服务器造成压力。应对策略应该在业务数据分析与预防方面进行,配合运行监控测试与即时调整策略,毕竟单个key的过 期监控难度较高,配合雪崩处理策略即可。

1.4 缓存穿透
    场景:数据库服务器又崩溃了,跟之前的一样吗?

    1.系统平稳运行过程中

    2.应用服务器流量随时间增量较大

    3.Redis服务器命中率随时间逐步降低

    4.Redis内存平稳,内存无压力

    5.Redis服务器CPU占用激增

    6.数据库服务器压力激增

    7.数据库崩溃

    问题排查:

    1.Redis中大面积出现未命中

    2.出现非正常URL访问

    问题分析:

    获取的数据在数据库中也不存在,数据库查询未得到对应数据
    Redis获取到null数据未进行持久化,直接返回
    下次此类数据到达重复上述过程
    出现黑客攻击服务器


    解决方案:

    1.缓存null

    ​ 对查询结果为null的数据进行缓存(长期使用,定期清理),设定短时限,例如30-60秒,最高5分钟

    2.白名单策略

    ​ 提前预热各种分类数据id对应的bitmaps,id作为bitmaps的offset,相当于设置了数据白名单。当加载正常数据时放行,加载异常数据时直接拦截(效率偏低)

    ​ 使用布隆过滤器(有关布隆过滤器的命中问题对当前状况可以忽略)

    2.实施监控

    ​ 实时监控redis命中率(业务正常范围时,通常会有一个波动值)与null数据的占比

    ​ 非活动时段波动:通常检测3-5倍,超过5倍纳入重点排查对象

    ​ 活动时段波动:通常检测10-50倍,超过50倍纳入重点排查对象

    ​ 根据倍数不同,启动不同的排查流程。然后使用黑名单进行防控(运营)

    4.key加密

    ​ 问题出现后,临时启动防灾业务key,对key进行业务层传输加密服务,设定校验程序,过来的key校验

    ​ 例如每天随机分配60个加密串,挑选2到3个,混淆到页面数据id中,发现访问key不满足规则,驳回数据访问

    总的来说:缓存击穿是指访问了不存在的数据,跳过了合法数据的redis数据缓存阶段,每次访问数据库,导致对数据库服务器造成压力。通常此类数据的出现量是一个较低的值,当出现此类情况以毒攻毒,并及时报警。应对策略应该在临时预案防范方面多做文章。

    无论是黑名单还是白名单,都是对整体系统的压力,警报解除后尽快移除。

    务器造成压力。应对策略应该在业务数据分析与预防方面进行,配合运行监控测试与即时调整策略,毕竟单个key的过 期监控难度较高,配合雪崩处理策略即可。

  
 

相关文章:

Redis企业级问题及解决方案

1.1 缓存预热 场景:“宕机” 服务器启动后迅速宕机 问题排查: 1.请求数量较高,大量的请求过来之后都需要去从缓存中获取数据,但是缓存中又没有,此时从数据库中查找数据然后将数据再存入缓存,造成了短期…...

【2021集创赛】基于arm Cortex-M3处理器与深度学习加速器的实时人脸口罩检测 SoC

团队介绍 参赛单位:深圳大学 队伍名称:光之巨人队 指导老师:钟世达、袁涛 参赛队员:冯昊港、潘家豪、慕镐泽 图1 团队风采 1. 项目简介 新冠疫情席卷全球,有效佩戴口罩可以极大程度地减小病毒感染的风险。本项目开发…...

B码的相关知识点笔记

B码(B-Code)通常是指中国北斗卫星导航系统的坐标编码方式。北斗卫星导航系统使用的坐标系是WGS-84,而B码是针对WGS-84坐标系进行编码的一种方式。 B码的格式通常为18位或24位,其中包含以下信息: 前两位为国家码&…...

java“贪吃蛇”小游戏

基于java实现贪吃蛇小游戏,主要通过绘制不同的图片并以一定速度一帧一帧地在窗体上进行展示。 我是在javaSwing项目下创建了一个包 名字叫做:Snakes包 包下有一个启动类和一个设置代码的主界面两个类 代码主界面: 代码主界面主要讲解的是 …...

【面试经典150 | 位运算】数字范围按位与

文章目录 Tag题目来源题目解读解题思路方法一:公共前缀方法二:n & (n-1) 写在最后 Tag 【位运算】 题目来源 201. 数字范围按位与 题目解读 计算给定区间内所有整数的按位与的结果。 解题思路 本题朴素的方法是直接将区间内的所有整数按位与&…...

推介会如何做好媒体宣传

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 推介会是一种专为企业、社会组织和团体、政府等提供的展示自身特点、产品和政策的活动形式,旨在促进交流活动,形成合作,从而带来共同利益。推介会的本…...

【ROS导航Navigation】五 | 导航相关的消息 | 地图 | 里程计 | 坐标变换 | 定位 | 目标点和路径规划 | 激光雷达 | 相机

致谢:ROS赵虚左老师 Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 参考赵虚左老师的实战教程 一、地图 nav_msgs/MapMetaData 地图元数据,包括地图的宽度、高度、分辨率等。 nav_msgs/OccupancyGrid 地图栅格数据&#…...

什么是脏读、不可重复读、幻读讲解

数据库隔离级别是数据库管理系统中一个重要的概念,它定义了事务之间的可见性和影响。在多用户并发访问数据库时,隔离级别能够确保事务之间的相互独立性,避免数据不一致的问题。本文将深入探讨三种常见的并发问题:脏读、不可重复读…...

2018年五一杯数学建模C题江苏省本科教育质量综合评价解题全过程文档及程序

2019年五一杯数学建模 C题 江苏省本科教育质量综合评价 原题再现 随着中国的改革开放,国家的综合实力不断增强,中国高等教育发展整体已进入世界中上水平。作为一个教育大省,江苏省的本科教育发展在全国名列前茅,而江苏省13个地级…...

第四代智能井盖传感器:万宾科技助力城市安全

在繁华喧嚣的城市里人来人往,井盖作为基础设施的一个组成部分在路面上分布范围广。然而这些看似普通的井盖却存在着位移、水浸的风险,可能给我们的生活带来诸多不便,更会威胁到我们的人身安全。如何有效监测和管理井盖的状态,成为…...

[Jenkins] Docker 安装Jenkins及迁移流程

系统要求 最低推荐配置: 256MB可用内存1GB可用磁盘空间(作为一个Docker容器运行jenkins的话推荐10GB) 为小团队推荐的硬件配置: 1GB可用内存50 GB 可用磁盘空间 软件配置: Java 8—无论是Java运行时环境(JRE)还是Java开发工具包(JDK&#xff…...

第七篇 基于JSP 技术的网上购书系统——新品上架、推荐产品、在线留言、搜索功能实现(网上商城、仿淘宝、当当、亚马逊)

目录 1.新品上架 1.1功能说明 1.2界面设计 1.3处理流程 1.4数据来源和算法 1.4.1数据来源 1.4.2查询条件 1.4.3表间关系 1.4.4相关sql实例 2.推荐产品 2.1功能说明 2.2界面设计 2.3处理流程 2.4数据来源和算法 2.4.1数据来源 2.4.2查询条件 2.4.3表间关…...

IntelliJ IDE 插件开发 |(一)快速入门

前言 IntelliJ IDEA 作为 Java 开发的首选 IDE,其强大、方便之处不必多说。不过,由于个人或者团队的个性化需求,我们或多或少会想对其功能进行拓展,这时就需要开发插件(在 IntelliJ 平台下的所有 IDE 均可运行&#x…...

【Ubuntu】Windows远程Ubuntu系统

步骤 开启ssh服务并开放22端口关闭防火墙ufw或iptables ;或者将远程端口添加到入站与出站规则安装xrdp并将xrdp用户添加到ssl-cert用户组mstsc 远程,输入账号密码 1、开启ssh服务 1.1. 查看ssh是否已经开启 sudo ps -e | grep ssh如果最后返回是sshd…...

pipeline jenkins流水线

Pipeline 是 Jenkins 中一种灵活且强大的工作流机制,它允许您以代码的形式来定义和管理持续集成和持续交付的流程。 Pipeline 的作用主要体现在以下几个方面: 可编排的构建流程:使用 Pipeline,您可以将一个或多个阶段&#xff08…...

软件工程理论与实践 (吕云翔) 第六章 面向对象分析课后习题及其解析

第六章 面向对象分析 知识点: 一个典型的软件系统通常包括的内容为:它使用数据结构(对象模型),执行操作(动态模型),并且完成数据值的变化(功能模型)。 3种模型之间的关…...

langchain(1):使用LangChain 调用 openai 的 text/chat model

文章目录 重要参考OPENAI API调用 Text 模型调用 Chat 模型消息角色 Chat 模型 vs Text 模型 通过 LangChain 调用 Text 和 Chat 模型调用 text 模型调用 chat 模型 重要参考 langchain 中文网 langchain api openai api 文档 huggingface LangChain 是一个全方位的、基于大…...

rabbitMQ的扇出模式(fanout发布订阅)的生产者与消费者使用案例

扇出模式 fanout 发布订阅模式 生产者 生产者发送消息到交换机(logs),控制台输入消息作为生产者的消息发送 package com.esint.rabbitmq.work03;import com.esint.rabbitmq.RabbitMQUtils; import com.rabbitmq.client.Channel;import java.util.Scanne…...

VSCode打开Json 文件格式化

在VSCode中打开JSON文件时,你可以使用以下步骤来格式化JSON并显示为多行: 使用快捷键: 在打开的JSON文件中,使用快捷键格式化文档。 Windows/Linux:Shift Alt FmacOS:Shift Option F 右键菜单&#xff…...

【C++】:STL——标准模板库介绍 || string类

📚1.什么是STL STL(standard template libaray-标准模板库):是C标准库的重要组成部分,不仅是一个可复用的组件库,而且 是一个包罗数据结构与算法的软件框架 📚2.STL的版本 原始版本 Alexander Stepanov、Meng Lee 在…...

Python小白之PyCharm仍然显示“No module named ‘xlwings‘”

Python小白之“没有名称为xlwings‘的模块”-CSDN博客文章浏览阅读8次。cmd 打开命令行,输入python出现>>>的提示格,输入import xlwings 回车,正常报错:No module named xlwings。输入python 回车后,再输入im…...

在Uni-app中实现计时器效果

本文将介绍如何在Uni-app中使用Vue.js的计时器功能实现一个简单的计时器效果。 首先&#xff0c;我们需要创建一个包含计时器的组件。以下是一个基本的计时器组件示例&#xff1a; <template><div class"timer"><p>{{ formatTime }}</p><…...

Linux脚本shell中将Windos格式字符转换为unix

众所周知&#xff0c;windos的文档直接复制到linux服务器上去&#xff0c;是需要进行格式转换的&#xff0c;否则可能出现以下报错&#xff1a; 解决方法&#xff1a; vim 脚本 输入 :set ff ##会显示字符格式 :set ffunix ##转换为unix格式 :wq ##保存退出...

【分布式】MIT 6.824 Lab 2B实现细节分析

基于6.824 2020版 http://nil.csail.mit.edu/6.824/2020/schedule.html Lab 2A&#xff08;选举&#xff09;一天就完成了&#xff0c;主要是第一次开始写Raft需要稍微熟悉一下&#xff0c;但是几乎不用修改&#xff0c;很容易就通过了。不过到了Lab 2B就会发现2A能够通过纯属侥…...

MySql 数据库初始化,创建用户,创建数据库,授权

登录MySQL&#xff08;使用管理员账户&#xff09; mysql -u root -p 设置用户 -- 创建用户并设置密码 CREATE USER user_name% IDENTIFIED BY user_password;-- 删除用户 drop user user_name; 设置数据库 -- 创建数据库 CREATE DATABASE database_name;-- 删除数据库 DR…...

【洛谷算法题】P5712-Apples【入门2分支结构】

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5712-Apples【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格式&…...

vue项目中的js文件使用vuex

使用场景&#xff1a;假设有一个接口&#xff0c;需要在很多页面获取一遍并且将接口的返回值保存起来&#xff0c;这样就能使用vuex&#xff0c;将值保存在vuex中 实现&#xff1a;vuex中新建firmModule.js文件&#xff0c;编写存储值的代码&#xff0c;utils/getFirmData.js用…...

【Vue3】 computed 完整写法 全选反选 、计算商品总价

全选反选 const allCheck computed({get() {return buyCard.value.every(item > item.checkState)},set(val) {return buyCard.value.forEach(item > item.checkState val);},}); 计算商品总价格 const aggregatePrice computed(() > {const arr buyCard.value.f…...

Mindomo Desktop for Mac(免费思维导图软件)下载

Mindomo Desktop for Mac是一款免费的思维导图软件&#xff0c;适用于Mac电脑用户。它可以帮助你轻松创建、编辑和共享思维导图&#xff0c;让你的思维更加清晰、有条理。 首先&#xff0c;Mindomo Desktop for Mac具有直观易用的界面。它采用了Mac独特的用户界面设计&#xf…...

Spark资源规划-资源上线评估

1、总体原则 以单台服务器 128G 内存&#xff0c;32 线程为例。 先设定单个 Executor 核数&#xff0c;根据 Yarn 配置得出每个节点最多的 Executor 数量&#xff0c;每个节点的 yarn 内存/每个节点数量单个节点的数量 总的 executor 数单节点数量*节点数。 2、具体提交参数 …...