网站首页 > 开源技术 正文
背景
由于系统性能需求 现在将某些数据做了缓存 目前的策略是最长10分钟过期
java
这部分数据有特点如下:
数据不要求实时更新【查询次数多 更新次数少】
数据对于日期敏感
无特殊条件 各个用户数据相同
问题
实施反馈了一些数据如下
java
但是随后告知了开发
java
那么如何着手这个问题呢?
分析
首先在代码未变动之前 客户未反馈过此问题 初步排除是客户端缓存【不然应该以前也反馈该问题了】
那么大概率由于服务端加了缓存导致的 如果说是缓存出现了问题 那么客户清理了浏览器缓存怎么也不会发生数据正常【除非恰巧那个时间过期了】
那么集合我们使用两级缓存来分析吧 关于两级缓存的说明
java
既然使用了多级缓存那么必然是分布式环境才有价值
考虑了一下上述流程存在一个问题
由于ehcache这一步写数据到redis中是使用list的那么势必无法对redis每个key设置各自的ttl 因此对于
对于ehcache来说我们知道ehcache的过期是懒过期 何为懒过期?就是过期的策略在执行get的时候才会检查 参考关于两级缓存的说明 这样有可能发生一个问题
java
很明显了确实ttl是-1
java
当多台机器的时候 一旦某一台机器正在发布等场景 为了简单描述我们分别设置为机器A 机器B
机器A上的为ehcacheA 机器B上的为ehcacheB 【两者完全等价】
如果用户访问的数据此后再不会访问的话
当机器A需要发布的时候 此时机器A上的ecacheA将会清空
那么就会出现在ehcacheB上的数据存在 而此时ehcacheA上并没有该key【当然redis中也存在】
此时机器A发布完成 来进行机器B的发布 那么此时机器B上ehcacheB的对应的缓存key也会消失
那么现在唯一留着数据的地方就是redis
第二天用户访问该数据就会发现本地ehcache没有数据 那么访问机器A会生成本地ehcacheA数据 访问机器B会生成本地ehcacheB数据【出现下次第一次访问的时候直到ehcache过期时间达到才会清除数据】
当机器A需要发布的时候 用户通过机器B来访问服务 此时机器A上的ecacheA将会清空
此时机器A发布完成 来进行机器B的发布 那么此时机器B上ehcacheB的对应的缓存key也会消失 此刻用户通过机器A获取服务【ehcacheA上写入了新的数据】
如果用户访问的数据此后再不会访问的话 那么就会出现在ehcacheA上的数据一直存在【ehcache懒过期】 而此时ehcacheB上并没有该key【当然redis中也存在】
用户下一次【比如现在的场景 下一天】访问时假设第一次访问的是机器B 发现ehcacheB中没有数据 随即去了redis中获取了脏数据 那么此时ehcacheB和ehcachA中数据已经不一样了
那么用户如果一直访问机器B的话直到ehcache过期时间达到才会清除数据 但是由于nginx策略通常会随机访问到机器A的服务 此时由于懒加载策略发现时间已经过期 因此去除了缓存 发送了expire广播
此时机器A 机器B 和redis中数据都被清除 但是此时访问到了真正的服务【通常是db】将新的结果同时存入了redis和ehcacheA中 用户获得了正确的结果
推广开应该很多场景下会有此问题 需要开发人员注意一下~
解决方案
由于用户关心的数据对日期比较敏感
因此考虑增加日终任务在12:00 自动清除该缓存~
在这里给大家按点福利:具有1-5工作经验的,面对目前流行的技术不知从何下手,需要突破技术瓶颈的可以加群。在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的可以加。如果没有工作经验,但基础非常扎实,对java工作机制,常用设计思想,常用java开发框架掌握熟练的可以加群。java中高级群:463884523一起交流一起进步。
- 上一篇: 为什么我建议大家一定要用J2Cache
- 下一篇: java中常用的缓存框架(java缓存组件)
猜你喜欢
- 2024-10-26 「配置163源」解决yum的疑难杂症(163邮箱适配版)
- 2024-10-26 技术干货分享:记录一次系统性能调优过程
- 2024-10-26 学习Log4j2 JNDI注入漏洞(CVE-2021-44228)
- 2024-10-26 垃圾回收算法与 JVM 垃圾回收器综述
- 2024-10-26 万字详文:Java内存泄漏、性能优化、宕机死锁的N种姿势
- 2024-10-26 品味Spring Cache设计之美(spring.cache)
- 2024-10-26 【开源推荐】Jboot v3.1.5 发布,持续完善文档和优化细节
- 2024-10-26 Jboot v3.1.9 发布,分布式事务 Seata 升级到最新版本
- 2024-10-26 关于IBPS微服务版本,我们用了什么技术?
- 2024-10-26 多租户微服务脚手架 zuihou-admin-cloud,不错的学习案例
你 发表评论:
欢迎- 最近发表
-
- 后端服务太慢?试试这 7 招(后端 服务端 区别)
- 做一个适合二次开发的低代码平台,把程序员从curd中解脱出来-1
- Caffeine缓存 最快缓存 内存缓存(caffeine缓存使用)
- Java性能优化的10大策略(java性能调优从哪几个方面入手)
- New Balance M576PGT 全新配色设计
- x-cmd pkg | qrencode - 二维码生成工具
- 平和精英抽奖概率是多少 平和精英抽奖物品一览
- x-cmd pkg | tmux - 开源终端多路复用器(terminal multiplexer)
- 漫威官方App中文版上线:全站漫画限时免费
- macOS Monterey 12.7.4 (21H1123) 正式版发布,ISO、IPSW、PKG 下载
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)