@Cacheable踩坑,服务停住,~lock

news2024/12/28 2:23:24

1、问题
方法使用@Cacheable注解,服务每次重启后,调到这个方法都服务停住了,日志也不打了。

2、原因
服务停止住了,发现redis会生成key~lock的锁,永不过期,也没有删除。

例如以下,在我们的key 后面加了~lock
在这里插入图片描述
3、解释:

在 Spring Framework 中,@Cacheable 注解用于缓存方法的返回结果。在使用 Redis 作为缓存存储时,你可能会看到以 key~lock 形式存在的键。这通常是为了实现缓存的并发控制和一致性而使用的。

具体来说,key~lock 是为了防止缓存击穿(cache breakdown)或缓存并发写入问题。以下是一些关键点:

  1. 缓存击穿和并发控制

    • 缓存击穿 指的是缓存中存储的数据过期了,导致多个线程同时去访问数据库,造成数据库压力过大。为避免这个问题,系统使用锁来确保只有一个线程能够去从数据源加载数据,而其他线程则等待数据加载完成。
    • 并发控制 确保同一时间只有一个线程可以更新缓存数据。为了防止多个线程同时尝试加载数据到缓存中,系统会使用一个锁来确保数据的正确性和一致性。
  2. key~lock 的作用

    • 当一个线程第一次尝试从缓存中获取数据时,系统会在 Redis 中创建一个类似 key~lock 的临时锁键。
    • 如果其他线程尝试获取相同的缓存数据,它们会看到这个锁,并且会等待锁释放,以避免同时触发多个数据加载操作。
    • 一旦数据加载完成,锁会被删除,从而允许其他线程获取到缓存的数据。

要查看 key~lock 的具体实现,你可以查看 Spring Cache 和 Redis 的相关源码:

  1. Spring Framework 源码
    • @Cacheable 注解及其处理逻辑主要在 org.springframework.cache.annotation 包下。
    • 缓存操作的实现可能涉及到 CacheInterceptor 类,该类负责拦截缓存操作。

该部分源码我没有找到,这段是GPT说明的,如果有同仁找到,麻烦评论告知下

5、说明:

我出现这个原因是我kill -9 服务的端口,服务直接停止,可能导致了这个key~lock还没删除掉,下次要进来读的时候,发现这个锁还在,就在等待。

  1. 锁未释放:如果 Redis 锁没有被正确释放,下次启动时,服务可能会发现锁依然存在,从而无法进行缓存操作或者数据加载。

  2. 恢复机制:为了避免这种情况,通常会在实现中设置锁的超时时间。这样即使服务崩溃,锁也会在超时后自动释放,允许其他服务继续获取缓存数据。

  3. 异常处理:建议在服务中实现适当的异常处理和恢复机制,确保锁不会长时间存在,并尽可能恢复服务的正常运行。

6、建议:

1、服务不要直接kill 掉,可能会出现数据库或者redis事务还没处理完,导致出现一些事故
2、需要经常操作和获取redis缓存的,直接使用redisUtil.get(),直接获取就好,不要使用@Cacheable

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

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

相关文章

【2025】公司仓库管理系统的设计与实现(公司仓库信息管理系统,仓库信息系统,管理系统,信息管理系统,货物仓管系统)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

【IEEE出版】2024博鳌新型电力系统国际论坛——电力系统与新能源技术创新论坛(NPSIF 2024,10月30-11月1)

2024博鳌新型电力系统国际论坛——电力系统与新能源技术创新论坛将于2024年10月30-11月1日于海南博鳌举办。 会议的历史悠久,致力于促进电力系统领域的研究和开发活动,同时也着眼于促进全球各地研究人员、开发人员、工程师、学生和从业人员之间的科学信息…

适合新手进阶,借助ChatGPT撰写学术论文全流程指南,附顶级提示词使用攻略

大家好,感谢关注。我是七哥,一个在高校里不务正业,折腾学术科研AI实操的学术人。关于使用ChatGPT等AI学术科研的相关问题可以和作者七哥(yida985)交流,多多交流,相互成就,共同进步,为大家带来最酷最有效的智能AI学术科研写作攻略。 学术论文的写作涉及深入研究、分析…

ECCV`24 | 蚂蚁集团开源风格控制新SOTA!StyleTokenizer:零样本精确控制图像生成

文章链接:https://arxiv.org/pdf/2409.02543 代码&数据集链接: https://github.com/alipay/style-tokenizer 亮点直击 介绍了一种名为StyleTokenizer的新方法,用于在扩散模型中进行风格控制。这种方法允许通过一个任意参考图像实现对生成…

元学习(meta learning)(一)

元学习从字面的意思就是“学习”的“学习”,也 就是学习如何学习。大部分的深度学习就是在不断的调整超参数,或者在决定网络架构,改变 学习率等等。实际上没有什么好方法来调这些超参,今天工业界最常拿来解决调整超参数的 方法是买…

dpdk——数据平面开发套件

数据平面开发工具包 (DPDK) 是一个 Linux Foundation 项目,它由多个库组成,用于加速在各种 CPU 架构上运行的数据包处理。 网络性能、吞吐量和延迟对于各种应用程序至关重要,包括无线和有线基础设施、路由器、负载均衡…

2024年【防爆电气】考试题库及防爆电气复审模拟考试

题库来源:安全生产模拟考试一点通公众号小程序 防爆电气考试题库根据新防爆电气考试大纲要求,安全生产模拟考试一点通将防爆电气模拟考试试题进行汇编,组成一套防爆电气全真模拟考试试题,学员可通过防爆电气复审模拟考试全真模拟…

基于Java+SpringBoot+Vue+MySQL的高校大学生迎新管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于SpringBootVue的高校大学生迎新管理系统【附源码文档】…

828华为云征文 | Flexus X 实例服务器网络性能深度评测

引言 随着互联网应用的快速发展,网络带宽和性能对云服务器的表现至关重要。在不同的云服务平台上,即便配置相同的带宽,实际的网络表现也可能有所差异。因此,了解并测试服务器的网络性能变得尤为重要。本文将以华为云X实例服务器为…

【NumPy】基础知识

NumPy是Python的第三方库,要使用需要先导入。 import numpy as np 在pycharm中可以通过np.来查看numpy的可用函数。 np.函数名? 查看对应函数的详细信息。 生成NumPy数组 ndarray 多维数组对象 numpy封装了一个新的数据类型ndarray,是一个多维数组对…

图论篇--代码随想录算法训练营第五十三天打卡| 110. 字符串接龙,105.有向图的完全可达性,106. 岛屿的周长

110. 字符串接龙 题目链接:110. 字符串接龙 题目描述: 字典 strList 中从字符串 beginStr 和 endStr 的转换序列是一个按下述规格形成的序列: 序列中第一个字符串是 beginStr。序列中最后一个字符串是 endStr。 每次转换只能改变一个字符…

解决报错:java.lang.NumberFormatException: Cannot parse null string

最近在做javaweb项目,整了一整天,代码翻来覆去反复看,就是没看出问题,没承想问题是出在编码上,我服了!我就知道我代码逻辑没问题。 把enctype"multipart/form-data"删掉,就好了... 这…

自然语言处理系列六十三》神经网络算法》LSTM长短期记忆神经网络算法

注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】 文章目录 自然语言处理系列六十三神经网络算法》LSTM长短期记忆神经网络算…

【C++多线程编程】 线程安全与对象生命周期管理

目录 类的线程安全 实现线程安全 构造函数在多线程中的安全性 析构函数多线程环境的安全 智能指针实现多线程安全 shared_ptr 非完全线程安全 shared_ptr可能导致对象生命周期延长 const引用可以减少传递shared_ptr开销 shared_ptr 智能指针块模块的优点 析构所在线程…

前端核心基础知识总结

目录 前言 一、HTML模块 1. 标签结构 2. 语义化标签 3. 表单元素 二、CSS模块 1. 选择器 2. 盒模型 示例一:为一个div标签设置了宽度为 200 像素,高度为 100 像素的内容区。 示例二:内边距的存在可以使内容与边框之间有一定的间隔&…

数字化转型专家讲师培训师唐兴通中欧国际工商学院数字化转型战略与实现路径AIGC人工智能数字化战略数字商业模式创新

《数字化转型战略与实现路径》 课程内容与收益 本课程的目标是通过深入的学习来帮助学员全面地了解数字化转型的概念和实现路径,掌握数字化转型的各种方法和技巧,进而提升数字化转型的能力和水平,从而使企业更具有竞争力。在这个课程中&…

《黑神话悟空》永冻流出装如何装备!!

整体玩法是通过法宝芭蕉扇打出控制后,再用化身技打出冰冻,冰冻期间用棍花持续输出,同时积攒元气和棍势,在利用三或四棍势打出一波爆发输出,基本上一套打完元气又满了,可以再放下一次控制,如此循…

【AI大模型应用开发】1.3 Prompt攻防(安全) 和 Prompt逆向工程

AI大模型应用开发教程 随着GPT和Prompt工程的大火,随之而来的是隐私问题和安全问题。尤其是最近GPTs刚刚开放,藏在GPTs后面的提示词就被网友们扒了出来,甚至直接被人作为开源项目发布,一点安全和隐私都没有,原作者的收…

C语言程序与设计第四版课后习题 - 1~8章大合集

前言 本文章是一个大合集,按照课后习题的命名方式命名,方便寻找,只需要在目录上点相对应的题号即可在这里插入图片描述 第一章课后习题 1.1 编写一个C程序 题目概述: 请参照本章例题,编写一个C程序,输…

CMU 10423 Generative AI:lec3(阅读材料:GPT1论文解读)

推荐参考:李沐的B站视频《GPT,GPT-2,GPT-3 论文精读》https://www.bilibili.com/video/BV1AF411b7xQ 一点记忆: GPT1参数量:大概1亿参数 12层decoder(维度768,12个注意力头) 训练集…