关于Redis因OAuth 2.0内存溢出解决方案

news2024/9/24 21:21:24

一、背景介绍

1.问题简介

  本次问题是由OAuth 2.0授权框架(用于授权第三方应用程序【客户端】访问受保护的资源。)存储在Redis集群中的一个key引起的:client_id_to_access(或称为 “client ID to access”)通常是指在OAuth 2.0认证流程中,客户端(Client)使用的唯一标识符。导致溢出原因:当使用命名空间存储client_id_to_accessuname_to_access的列表数据时,整个键的过期时间会随列表数据的更新而刷新。这可能导致与同一clientIdusername相关的令牌过期后,键却没有被及时删除,从而导致内存溢出问题。简单来说TTL过期时间一直处于被无限重置状态从而是数据变成了变相的永久存储导致Redis内存溢出。

2.Redis相关信息

  Redis 采取的是三主三从集群模式,部署在k8s上采取了固定集群ip池的方案。集群详细信息如图:
在这里插入图片描述

二、发现&解决

1.发现

根据监控观察redis近1个月的内存使用情况如图:

在这里插入图片描述

可以看到Redis内存稳步增长至100%导致内存溢出系统崩溃

使用工具进行 内存分析 研究:

在这里插入图片描述
在这里插入图片描述

从图中看出client_id_to_access大小已经达到了1GB存储的个数也是上升到了近8W之多!

2.解决

修改Redis配置文件增加配置 notify-keyspace-events Ex,使其永久生效

在这里插入图片描述

连接服务端输入命令:config set notify-keyspace-events Ex,使其即刻生效

在这里插入图片描述

介绍:

Redis的notify-keyspace-events选项的 Ex参数:
该选项启用了对键过期事件的通知,使你能够在键过期时执行相应的操作。

  然后,在你的应用程序中,订阅Redis的键过期事件通知。你可以使用Redis的客户端库(如Jedis或Lettuce)订阅过期事件,并在事件触发时执行相应的操作,例如删除与过期键相关的数据或执行其他清理操作。

Jedis jedis = new Jedis("localhost");
JedisPubSub jedisPubSub = new JedisPubSub() {
    @Override
    public void onPMessage(String pattern, String channel, String message) {
        // 在这里处理过期键的事件
        System.out.println("键过期:" + message);
         
        // 执行相应的操作,如删除与过期键相关的数据
        // jedis.del("your_key");
    }
};
 
// 订阅过期事件,通配符匹配以 "__keyevent@*__:expired" 结尾的键
jedis.psubscribe(jedisPubSub, "__keyevent@*__:expired");

3.检验

在这里插入图片描述
在这里插入图片描述

三、结束语

  本次关于RedisOAuth 2.0内存溢出解决方案就到此结束了,后期会给大家带来更多的脚本,感谢认真读完,如果觉得还可以,那么给作者点赞、收藏、关注吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/738980.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安全用电管理平台针对电气火灾的解决方案 安科瑞 许敏

摘要: 安全用电管理平台是针对我国当前电气火灾事故频发而设计的一套电气火灾预警和预防管理系统,该系统是基于移动互联网、云计算技术、通过物联网传感终端(现场监控模块、传输模块),将供电侧、用电侧电气安全参数实时…

java 打包Spring Boot项目,并运行在windows系统中

前面呢 我们已经把Spring Boot比较基础的东西都弄完了 然后呢 我们来看运维这方面的知识 首先 我们做个打包运行 其实很多人可能会比较熟悉windows系统 而linux服务器 相对没那么了解 那么我们就先来弄windows的 首先 我们要知道 为什么要打包 我们就看我们前面做的MMP项目 当…

git轻量级服务器gogs

确保本真机已启动sshd服务 sudo apt install openssh-server -y sudo systemctl start sshgogs部署 启动 sudo docker stop gogs; sudo docker rm gogs; rm -fr /build/gogs_data/*; sudo docker run --namegogs -p 10022:22 -p 10880:3000 -v /build/gogs_data:/data …

布雷默浪丹 PT 141:189691-06-3,1607799-13-2,Bremelanotide,布美诺肽

Bremelanotide,布雷默浪丹 PT 141,布美诺肽Product structure: Product specifications: 1.CAS No:189691-06-3/1607799-13-2 2.Molecular formula:C50H68N14O10 3.Molecular weight:1025.063 4…

抖音seo矩阵系统源码开发部署-技术开源(三)

场景:抖音seo源码。抖音矩阵源码,短视频seo源码,短视频矩阵源码开发部署,技术分享, 一、 抖音seo源码开发所需服务器环境配置 要开发抖音SEO矩阵系统,需要以下服务器环境: Web服务器&#xff…

Jmeter的常用设置(二)【处理乱码问题】

文章目录 前言一、察看结果树响应结果是乱码_解决方法 方法一:在察看结果树之前添加 后置处理器 中的 “BeanShell PostProcessor” 来动态修改结果处理编码方法二:在配置文件中修改二、使用步骤 1.引入库2.读入数据总结 前言 接口测试中遇到的各种问题…

使用 ViteJs 将 Jest 测试集成到现有的 Vue 3 项目中

根据我最近的经验,我面临着将 Jest 测试框架集成到使用Vite构建的现有Vue3 js项目中的挑战。我在各种博客上找到有用的安装指南时遇到了困难。然而,经过多次尝试和付出很大的努力,我最终找到了解决方案。在这篇博文中,我的目标是提…

2023黑马头条.微服务项目.跟学笔记(五)

2023黑马头条.微服务项目.跟学笔记 五 延迟任务精准发布文章1.文章定时发布2.延迟任务概述2.1 什么是延迟任务2.2 技术对比2.2.1 DelayQueue2.2.2 RabbitMQ实现延迟任务2.2.3 redis实现 3.redis实现延迟任务4.延迟任务服务实现4.1 搭建heima-leadnews-schedule模块4.2 数据库准…

Swagger简介及Springboot集成Swagger详细教程

Swagger简介及Springboot集成Swagger详细教程 学习目标 了解Swagger的作用和概念了解前后端分离在SpringBoot中集成Swagger 1、Swagger简介 前后端分离 VueSpringBoot 后端时代 前端只用管理静态页面;html–>后端。模版引擎JSP–>后端是主力 前后端分离式时…

获取mysql存储过程的异常信息

示例 CREATE DEFINERrootlocalhost PROCEDURE getErrorMsg() BEGIN-- 定义存储变量DECLARE code CHAR(5) DEFAULT ;DECLARE msg TEXT;DECLARE result TEXT;-- 声明异常处理DECLARE CONTINUE HANDLER FOR SQLEXCEPTIONBEGIN-- 获取异常code,异常信息GET DIAGNOSTICS CONDITION …

基于单片机的恒温恒湿温室大棚温湿度控制系统的设计与实现

功能介绍 以51单片机作为主控系统;液晶显示当前温湿度按键设置温湿度报警上限和下限;温度低于下限继电器闭合加热片进行加热;温度超过上限继电器闭合开启风扇进行降温湿度低于下限继电器闭合加湿器进行加湿湿度高于上限继电器闭合开启风扇进行…

干翻Dubbo系列第三篇:Dubbo术语与第一个应用程序

前言 不从恶人的计谋,不站罪人的道路,不坐亵慢人的座位,惟喜爱耶和华的律法,昼夜思想,这人便为有福!他要像一棵树栽在溪水旁,按时候结果子,叶子也不枯干。凡他所做的尽都顺利。 如…

小程序页面顶部标题栏、导航栏navigationBar如何隐藏、变透明?

在app.json中的 "window"下面追加一行 "navigationStyle": "custom" 小程序顶部的白色背景条就不见了&#xff0c;直接变透明&#xff0c;只剩下右上角的胶囊按钮 警告&#xff1a; 如果页面有 <web-view src"{{src}}" /> …

机器学习实战 | MNIST手写数字分类项目(深度学习初级)

目录 简介技术流程1. 载入依赖包和数据集2. 数据预处理3. 创建卷积神经网络模型4. 训练神经网络5. 评价网络 完整程序train.py 程序gui.py程序 简介 准备写个系列博客介绍机器学习实战中的部分公开项目。首先从初级项目开始。 本文为初级项目第二篇&#xff1a;利用MNIST数据集…

111、基于51单片机的电磁感应无线充电系统 手机无线充电器设计(程序+原理图+Proteus仿真+程序流程图+论文参考资料等)

方案选择 单片机的选择 方案一&#xff1a;AT89C52是美国ATMEL公司生产的低电压&#xff0c;高性能CMOS型8位单片机&#xff0c;器件采用ATMEL公司的高密度、非易失性存储技术生产&#xff0c;兼容标准MCS-51指令系统&#xff0c;片内置通用8位中央处理器(CPU)和Flash存储单元…

在SpringBoot中对微服务项目的简单使用

准备数据库的数据 create database leq_sc; CREATE TABLE if not exists products(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50), #商品名称 price DOUBLE,flag VARCHAR(2), #上架状态 goods_desc VARCHAR(100), #商品描述images VARCHAR(400), #商品图?goods_stock I…

[工业互联-21]:常见EtherCAT主站方案:Kithara实时套件

第1章 Kithara实时套件概述 1.1 概述 Kithara Software是一家德国的软件公司&#xff0c;专注于实时技术和嵌入式解决方案。 他们为Windows操作系统提供了Kithara RealTime Suite&#xff0c;这是一套实时扩展模块&#xff0c;使Windows能够实现硬实时任务和控制。 Kithara…

菜比:你还不会接口测试?

很多人会谈论接口测试。到底什么是接口测试&#xff1f;如何进行接口测试&#xff1f;这篇文章会帮到你。 一、前端和后端 在谈论接口测试之前&#xff0c;让我们先明确前端和后端这两个概念。 前端是我们在网页或移动应用程序中看到的页面&#xff0c;它由 HTML 和 CSS 编写…

QT - 20230710

练习&#xff1a;实现一个简易闹钟 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDateTime> #include <QDebug> #include <QTextToSpeech>namespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpubl…

Kafka入门, Kafka-Kraft 模式 部署(二十六)

Kafka-Kraft 模式 左图为kafka现有架构&#xff0c;元数据在zookeeper中&#xff0c;运行时动态选举controller,由controller进行kafka集群管理&#xff0c;右图为kraft模式架构&#xff08;实验性&#xff09;&#xff0c;不再依赖zookeeper集群&#xff0c;而是用三台control…