Redis偶发Cannot determine a partition for slot报错问题

Redis偶发Cannot determine a partition for slot报错问题

  • 一、背景
  • 二、问题定位
    • 1、报错位置
    • 2、lettuce定时刷新任务
    • 3、本地缓存masterCache先清理后写入的问题
  • 三、解决方案:版本升级

一、背景

线上系统(springboot)经常报错Cannot determine a partition for slot,搜索过后发现已有的解决方案大多是Redis集群的配置不对。对于我们的线上系统来说,这显然是不可能的,经过和DBA确认,报错时间点Redis集群无变更。

Caused by: io.lettuce.core.cluster.PartitionSelectorException:
Cannot determine a partition for slot 5586.

二、问题定位

我们系统使用的是lettuce6.2.0.RELEASE

1、报错位置

根据报错信息搜索报错的代码位置,可以看到是通过slot槽获取Redis节点信息时,返回值为null。
在这里插入图片描述

2、lettuce定时刷新任务

下面分析masterCache的写入机制。
而对于lettuce而言,开启拓扑定时刷新后,会提交定时刷新任务到Schedule线程池(ScheduledExecutorService)中。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

对于拓扑刷新的核心步骤分为三步
在这里插入图片描述

3、本地缓存masterCache先清理后写入的问题

在lettuce定时刷新任务的第三步时,会进行本地缓存的刷新,其先进行本地缓存的清理,再写入新的缓存,那对于本地缓存已清理新缓存还未写入的这段时间差,如果有Redis操作,则会找不到节点,即抛出Cannot determine a partition for slot异常。
在这里插入图片描述
在这里插入图片描述

三、解决方案:版本升级

将lettuce升级至最新版本6.2.6.RELEASE,可以看到其刷新本地缓存的逻辑已经进行了优化,只有当节点信息为空的时候才会清理本地缓存,直接用新的缓存信息覆盖旧缓存。
![[Pasted image 20231226204432.png]]

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux内存管理:(六)页交换算法

文章说明: Linux内核版本:5.0 架构:ARM64 参考资料及图片来源:《奔跑吧Linux内核》 Linux 5.0内核源码注释仓库地址: zhangzihengya/LinuxSourceCode_v5.0_study (github.com) 1. 引言 在Linux操作系统中&#x…

6592A便携式高精度光伏电池伏安特性测试仪

6592A便携式高精度光伏 电池伏安特性测试仪 光伏仪器 主要用于室外太阳能电池阵列/组件/电池片伏安特性测试 国产思仪 01 产品综述 6592A便携式高精度光伏电池伏安特性测试仪,主要用于室外太阳能电池阵列/组件/电池片伏安特性测试,能够方便、快速的…

系列三十三、如何将一个springboot jar做成批处理文件

一、将一个springboot jar做成批处理文件 1.1、需求 最近在写【Spring Cloud Alibaba】的系列文章,其中有一个部分是安装Sentinel控制台,使用命令执行完全没有问题,但是命令太长了,每次启动时都要找笔记,然后粘贴到命…

小兔鲜儿 uniapp - 项目打包

目录 微信小程序端​ 核心步骤​ 步骤图示​ 条件编译​ 条件编译语法​ 打包为 H5 端​ 核心步骤​ 路由基础路径​ 打包为 APP 端​ 微信小程序端​ 把当前 uni-app 项目打包成微信小程序端,并发布上线。 核心步骤​ 运行打包命令 pnpm build:mp-weix…

C语言编译器(C语言编程软件)完全攻略(第十三部分:VS2010使用教程(使用VS2010编写C语言程序))

介绍常用C语言编译器的安装、配置和使用。 十三、VS2010使用教程(使用VS2010编写C语言程序) 提示:VS2010 可以在 XP、Win7 和 Win8 下完美运行,但在 Win10 下可能会有兼容性问题,使用 Win10 的读者建议安装 VS2015 或…

四种“栈溢出检测方法”实现分析(2种纯软件、一种纯硬件、一种软硬件结合)

1、两种纯软件的栈溢出检测方法 参考博客:《freeRTOS的栈溢出检测机制》; 2、纯硬件:使用栈限制寄存器 2.1、工作逻辑分析 前提条件:使用满减栈硬件上提供栈限制寄存器(用SP_limit表示),可以…

HttpRunner自动化测试之实现参数化传递

参数化实现及重复执行 参数化测试:在接口测试中,为了实现不同组数据对同一个功能模块进行测试,需要准备多组测试数据对模块进行测试的过程。 在httprunner中可以通过如下方式实现参数化: 1、在YAML/JSON 中直接指定参数列表 2、…

2024年5大海外代理IP测评推荐

在跨境电商行业,想要发送安全运营跨境电商账号,多账号社媒推广,独立站SEO优化等等的业务都少不了代理IP工具。安全高质的代理IP可以保障你的网络活动安全、匿名、高效。 面对众多代理IP商,您是否很难做出购买决定?哪些…

FinGPT——金融领域开源大模型

文章目录 背景论文摘要相关工作大型语言模型(LLMs)和ChatGPT金融领域的LLMs为什么需要开源的金融LLMs? 以数据为中心的方法用于FinLLMs金融数据和独特特性应对处理金融数据的挑战 FINGPT 概述:FINLLM 的开源框架数据来源面向金融N…

C++进阶(一)继承

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、继承的概念及定义1、继承的概念2、继承定义1、定义格式2、继承关系和访问限定符3、继承基…

SSMBUG汇总

20240103 通用,驼峰命名法,mybatis。 mybatis入门程序中, // 获取对象的顺序为:SqlSessionFactoryBuild-》SqlSessionFactory-》SqlSessionSqlSessionFactoryBuilder sqlSessionFactoryBuilder new SqlSessionFactoryBuilder();I…

怎么选择一款好用的ERP企业管理软件?看这六点就够了!

在目前高度信息化的环境中,ERP系统已成为生产制造企业管理的心脏。它集财务、人力资源、采购、生产、销售和库存等多个业务功能于一身,为企业提供了一个统一的、高效的、实时的管理平台。然而,市场上的ERP软件繁多,选择一款真正适…