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

feed二级缓存设计day05

背景feed流投喂流主动把消息发给我们类似于朋友圈别人的消息组成了我的主页feed流与内容详情是该社区访问最多的接口面临着以下挑战- **高并发读压力**首页 Feed 与热门内容详情同一时刻可能面对数千次并发请求。- **缓存击穿Hot Key**热点内容被同时打穿缓存导致数据库瞬间过载。- **缓存穿透**查询不存在的内容每次都回源数据库。- **缓存雪崩**大量缓存同时过期流量同时回源。二级缓存架构L1Caffeine 本地缓存进程内~0 ms│ 命中 → 直接返回叠加用户态后返回│ 未命中 ↓▼L2公共 FeedRedis 片段缓存ids / item / hasMoreL2详情 / 我的发布Redis 整页 JSON 缓存~1–5 ms│ 命中 → 填充 L1返回│ 未命中 ↓▼Single-Flight 锁防击穿惊群│ 等待锁后再查 L2Double Check│ 仍未命中 ↓▼L3MySQL 数据库~10–100 ms│├── 写入 L2 Redis 缓存带随机抖动 TTL├── 写入 L1 Caffeine 缓存└── 返回叠加用户态后返回三层定位L1本地缓存存储的是完整的页面响应对象条目数组页码数量hasmore是否还有更多数据需要加载本地存储超短ttl容量有限专用于最热点keyL2redis存页面的骨架存储完整的页面数据结构如帖子详情页、Feed流页面用户无关数据 存储不包含用户个性化信息的数据如点赞/收藏状态全局共享ttl较长L1为ttl时间设置抖动防止缓存雪崩用于L1查询不到数据保护mysql直接被查询支持持久化L3mysql存储页面的所有元数据以及包括点赞收藏........计数是数据的大后方实现1.定义方法和参数处理2.生成缓存键3.从本地缓存拿数据4.如果本地缓存未查到从redis中查5.单飞锁当l1和l2都未查到时多请求打向数据库利用单飞锁防止缓存穿透SingleFlight 同一时刻对同一个 key 的请求只执行一次结果共享给所有等待者。对于多个请求只有一个请求能进去先重查L2因为第一个请求已经回源了数据库所以可以直接返回后回源数据库6.回源数据库回源数据库之后将数据重新写入两级缓存并释放锁对上面的方法补充记录热度记住record方法滑动窗口自定义hotkey探测1. 滑动窗口设计 - 窗口长度60秒可配置- 分段长度10秒可配置- 分段数量6个60/102. 数据结构 - 使用 ConcurrentHashMapString, int[] 存储每个key的计数数组- 每个key对应一个长度为6的数组每个元素代表一个10秒分段的访问次数- 使用 AtomicInteger 维护当前活跃分段的索引3. 计数机制 - 每次访问时调用 record(key) 方法- 将计数累加到当前活跃分段的位置- 采用无锁操作确保高并发下的性能4. 窗口滑动 - 每10秒执行一次 rotate() 方法- 将当前分段索引移动到下一个位置循环- 清零新的当前分段实现窗口的滑动效果热度等级与动态TTL1. 热度等级划分 - LOW窗口内访问次数≥50- MEDIUM窗口内访问次数≥200- HIGH窗口内访问次数≥5002. 动态TTL计算 - 基准TTL 热度等级对应的扩展时间- LOW20秒- MEDIUM60秒- HIGH120秒3. 使用场景 - 在Feed流访问时对每个条目调用 recordItemHotKey(item.id())- 计算该条目的热度等级- 动态延长相关缓存的TTL保护热点内容level代码的调用在ttlForPublic中记录热度滑动窗口的滑动机制Scheduled注解每10秒执行retate滑动原理 - 计算下一个分段索引 (current.get() 1) % segments- 更新当前分段指针到新位置- 清零新分段的计数为新的时间段做准备工作流程 1. 初始化 每个key对应一个长度为6的数组初始值全为02. 计数 每次访问时在当前分段位置13. 滑动 每10秒执行一次rotate将指针移动到下一个分段并清零4. 热度计算 累加所有6个分段的计数得到最近60秒的总访问次数5. 等级判断 根据总热度判断热度等级6. 动态TTL 根据热度等级计算延长的TTL时间- 时间0-10秒使用分段0计数- 时间10-20秒rotate到分段1清零分段1使用分段1计数- 时间20-30秒rotate到分段2清零分段2使用分段2计数- 以此类推60秒后回到分段0清零分段0开始新的循环这种设计能够实时反映最近60秒的访问热度并且随着时间推移自动衰减旧数据的影响。本地缓存和滑动窗口的基础配置

相关文章:

feed二级缓存设计day05

背景:feed流:投喂流,主动把消息发给我们,类似于朋友圈别人的消息组成了我的主页feed流与内容详情是该社区访问最多的接口,面临着以下挑战:- **高并发读压力**:首页 Feed 与热门内容详情同一时刻…...

SpringBoot+Vue 办公信息系统管理平台源码免费分享【适合毕设/课设/学习】Java+Vue+MySQL

【源码在文章最后】 ## 项目概述 办公自动化系统(Office Automatic System,简称OA)是一个基于Spring Boot和Vue.js的企业级办公管理平台,旨在提高企业内部办公效率,实现办公流程的数字化和自动化。 ## 项目信息 - *…...

新能源汽车车载双向OBC,PFC,LLC,V2G 双向充电桩MATLAB仿真模型及应用分析

新能源汽车车载双向OBC,PFC,LLC,V2G 双向 充电桩 电动汽车 车载充电机 充放电机 MATLAB仿真模型 : (1)基于V2G技术的双向AC/DC、DC/DC充放电机MATLAB仿真模型; (2)前级电路为双向AC/…...

基于单片机的药品分拣系统

一、系统介绍 目前,随着当今社会老龄化进程的逐步加剧,我们在新闻中经常能看到老人跌倒了,无人扶,进而导致老人的死亡。对于这种悲剧,我们也很无奈,因为怕扶了老人,可能会被讹,老年人…...

qmt之如何用局部极值寻找支撑位和压力位(下)

书接上回,上一节是原理讲解,这里开始实战。实战Python代码:使用argrelextrema寻找压力支撑下面的示例代码使用了 Python 的 scipy.signal.argrelextrema 来寻找局部极值,并绘制成可视化图表。结果如下:代码解析&#x…...

国内外主流AI产品的能力矩阵解构,不同用户该怎么选择?

026年了,AI早就不是什么新鲜词儿了,它已经变成了我们工作和生活里的“搭子”。但说实话,现在的AI产品多到让人眼花缭乱,国内外各种工具层出不穷,选错了不仅浪费时间,还可能踩坑。今天我们就来唠唠现在市面上…...

吐血整理,性能测试总结分析,快速上手打通(一)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、性能测试的测试…...

实测,2分钟完成OpenClaw部署全攻略,ToClaw傻瓜式安装

实测,2分钟完成OpenClaw部署全攻略,ToClaw傻瓜式安装最近,一只名叫OpenClaw的“龙虾”彻底火了——火到二手平台出现上门安装服务,腾讯大厦门口排起长队,甚至官媒都在热议。但传统的部署方式却让多数人望而却步&#x…...

给小龙虾装上业务大脑:两个 SKILL 让 OpenClaw 学会查数和归因

全网都在教小龙虾点外卖,我们让它算清了 GMV 为什么跌。这篇文章是配套的上手指南——从安装到提问到进阶调教,手把手带你跑通。 我们把小龙虾接上了 Aloudata CAN 语义层。六轮对话,从「上月销售额多少」一路追到「江西电商渠道销售额环比下…...

conda管理包还是pip管理包

1. Conda会自动处理依赖冲突我是用使用的是conda环境来python虚拟环境的,我创建了一个名叫ai的环境,我第一次进入环境后,先使用pip安装了一些包,然后发现由于版本冲突原因而下载失败,然后我又使用conda命令去下载这些包…...

基于SMO滑模观测器的异步电机无传感器矢量控制研究:Matlab仿真模型分析

基于SMO滑模观测器的异步电机无传感器矢量控制,matlab,仿真模型。无感矢量控制在工业界被玩得越来越溜,最近在实验室调了套基于滑模观测器(SMO)的方案。这玩意儿最大的爽点就是不需要速度传感器,靠算法硬怼…...

【Kotlin】快速理解协程

文章目录一、预备知识1.1 同步和异步1.1.1 同步1.1.2 异步1.2 异步编程1.2.1 异步编程的困境1.2.2 解决方案二、协程2.1 什么是协程2.1.1 协程的定义2.1.2 协程的特点2.2 结构化并发2.2.1 核心原则2.2.2 实现机制:Job 层次结构2.3 协程的基本概念2.3.1 协程和挂起函…...

南京租打印机别踩坑!押金透明、退机不扯皮才是王道

“很多企业以为‘租打印机只是看价格’,却忽略了押金和退机环节可能埋下的‘隐形坑’——这正是南京打印机复印机租赁市场中,专业服务商与普通商家的核心区别。”南京打印机复印机租赁:押金透明是专业服务的基础在南京打印机复印机租赁市场&a…...

告别AI Agent记忆混乱与幻觉!收藏这份RAG实战指南,小白也能轻松搞定大模型落地

本文深入剖析了AI Agent常见的记忆混乱和幻觉问题,并提出解决方案:通过RAG(检索增强生成)结合上下文工程,从外部知识库获取准确信息,优化上下文结构。文章详细介绍了向量数据库选型、Spring Boot集成Chroma…...

弃国外开源,创自主开源 Perseus:乐维的底层技术抉择与智能体战略

在IT运维监控领域,开源工具曾被视为降本提效的最优解,Prometheus、Zabbix 等凭借免费、生态丰富的优势占据大量市场份额。然而,乐维却选择放弃成熟的开源采集方案,历经 5 年迭代自研 Perseus 采集平台。这一决策并非对开源的否定&…...

CSDN Markdown自动发布踩坑记录与解决方案

CSDN Markdown自动发布踩坑记录与解决方案 最近把本地 Markdown 自动发布到 CSDN 这件事完整跑通了一遍,中间遇到了不少真实问题。 这篇文章主要记录整个排查过程、最终方案,以及后续使用时需要注意的几个点,方便后面继续维护。 一、目标 最开…...

Frida Hook实战:用JavaScript脚本拦截Android App的HttpURLConnection网络请求

Frida Hook实战:用JavaScript脚本拦截Android App的HttpURLConnection网络请求 在移动应用安全分析和逆向工程领域,动态插桩技术已经成为分析应用行为的利器。Frida作为其中的佼佼者,以其灵活的JavaScript脚本和强大的功能,让开发…...

基于java的人脸识别考勤管理系统的vue

目录系统架构设计后端实现要点前端Vue实现方案技术集成方案开发阶段划分注意事项项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作系统架构设计 采用前后端分离架构,后端使用Java&#xff0…...

HCIE培训机构哪家更划算?如何选择才能不花冤枉钱!

在数字化转型加速推进的背景下,企业对ICT领域专业人才的需求持续上升,个人通过技能提升实现职业发展的意愿也日益明显。HCIE作为华为认证体系中的高级认证,涵盖数通、云计算、安全等多个方向,已成为不少职场人士和应届毕业生关注的…...

基于java大学生心理健康管理系统

目录技术选型核心功能模块数据存储设计扩展功能实现测试与部署注意事项项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作技术选型 后端框架:Spring Boot(简化配置,内…...

从IO到NIO:Java文件操作的性能跃迁

在Java编程的早期阶段,我们依赖传统的BIO(Blocking I/O)进行文件读写操作。这种模式下,每个I/O请求都会占用一个线程,数据在磁盘、内核缓冲区、用户缓冲区之间反复拷贝,不仅线程开销大,还存在多…...

高效的触摸屏HMI配方管理与机种管理案例分享——以威纶触摸屏为例,结合宏指令实现复杂机种配方管理

触摸屏hmi配方管理机种管理 威纶触摸屏配方机种管理案例 本人实际项目上使用 结合宏指令可实现复杂机种配方管理去年在设备改造项目里遇到过头疼的问题:产线要同时处理12种不同型号的金属配件,每种型号对应15组工艺参数。操作工经常手抖选错参数&#xf…...

地埋式一体化污水处理设备优缺点

地埋式一体化污水处理设备优缺点 优点 节约土地与美观性:主体埋于地下,地表可用于绿化或建设停车场等,大幅节省土地资源,尤其适合土地紧张或对环境美观度要求高的区域,基本不影响地面空间的正常使用。 高效稳定的处理能…...

医用设备带:从基础生命支持终端到智慧医疗核心枢纽的演进之路

引言在现代化医院建设中,医用设备带作为临床诊疗区域的关键基础设施,正经历着从单一功能载体向智能化、集成化核心枢纽的深刻变革。它不仅是病房环境中不可或缺的组成部分,更是直接关联诊疗效率与患者体验的重要工程。随着智慧医院建设从概念…...

py每日spider案例之某website之music搜索接口(无加密)

import requestsheaders = {"accept": "application/json, text/plain, */*","accept-language": "zh-CN,zh;q=0.9","cache-control": "no-cache","origin":...

如何重置idea ai assistant ACP 插件中的 Cursor 账号登录状态?

在使用 JetBrains 系列 IDE(如 IntelliJ IDEA, PyCharm 等)配合 ACP (AI Assistant) 插件时,经常会遇到想要更换 Cursor 账号却“退出无门”的情况。即使卸载插件还是会重新登录之前的账号。 本文分享一个通过手动运行本地 Agent 脚本强制重…...

0 基础入门 Agent:理论知识体系搭建指南

本文档系统梳理 AI Agent 的核心理论知识,帮助理解”为什么这样设计”,为动手构建 Agent 打下认知基础。 1. 从 LLM 到 Agent:为什么需要 Agent 1.1 LLM 的能力与局限 大语言模型(LLM)本质上是一个”文本补全机器”…...

AI 时代,前端先死,还是后端先死?

当 Agent 开始接管一切,写按钮的和写接口的,谁先失业?引子:一场程序员的世纪之争 2025 年某个深夜,某互联网公司茶水间。 前端工程师小王正往杯子里倒第三包速溶咖啡,后端工程师老张靠在饮水机旁刷手机。…...

亲测好用 9个降AIGC平台全场景通用测评,哪个最能帮你降AI率?

在学术写作和内容创作领域,AI生成内容(AIGC)的广泛应用带来了前所未有的便利,但同时也引发了对原创性和查重率的关注。对于需要提交高质量论文或文章的用户来说,降低AIGC率、去除AI痕迹、提升文本原创性已成为一项重要…...

AI时代为何第一刀就砍了程序员?

当大模型从「聊天」走向「干活」,第一批被推到前台的,是能写代码、改 Bug、读文档的 Coding Agent。GitHub Copilot、Cursor、Devin、OpenCode……模型大厂和创业公司不约而同把「编程」当成 Agent 落地的第一块试验田。这不是偶然,而是数据、…...