一文理解缓存的本质:分层架构、原理对比与实战精粹

多级缓存的分层架构,缓存设计的五大策略 前言 缓存技术存在于应用场景的方方面面。从浏览器请求,到反向代理服务器,从进程内缓存到分布式缓存。其中缓存策略,算法也是层出不穷,今天就带大家走进缓存。缓存对于每个开发者来说是相当熟悉了,为了提高程序的性能我们会去加缓存,但是在什么地方加缓存,如何加缓存呢? 假设一个网站,需要提高性能,缓存可以放在浏览器,可以放在反向代理服务器,还可以放在应用程序进程内,同时可以放在分布式缓存系统中。 ... 阅读详情

📖 推荐阅读:《Yocto项目实战教程:高效定制嵌入式Linux系统》
🎥 更多学习视频请关注 B 站:嵌入式Jerry



一文理解缓存的本质:分层架构、原理对比与实战精粹

“缓存让系统飞起来”——但每一层缓存有何不同?怎样科学利用缓存体系?本文用分层视角、核心机制和真实案例,为你彻底讲明缓存世界的全貌。


一、什么是缓存?——本质与目的

缓存(Cache)指在更快的存储介质中临时存放一部分热点数据,以提升访问速度,减少对慢速资源的依赖。无论硬件还是软件层,缓存的核心目标都是“以小博大”,用局部高效来带动整体性能提升。


二、缓存的分层全景:“金字塔”架构图

不同层级的缓存组成了性能优化的“金字塔”:

在这里插入图片描述


三、常见缓存类型对比

层级驻留位置管理主体服务对象容量淘汰策略典型场景
CPU缓存CPU芯片内硬件CPU <-> 主内存KB~MBLRU/近似LRU等L1/L2/L3
页缓存RAM操作系统内核内存 <-> 磁盘MB~GBLRU/变种Linux/Windows Page Cache
应用/中间件缓存独立进程/库应用或中间件数据库/接口/热点对象MB~TBLRU/LFU/TTL等Redis、Memcached
前端缓存客户端/边缘浏览器/CDN等静态资源/页面MB~GBTTL/按需替换浏览器缓存、CDN节点

1. CPU缓存(L1/L2/L3)

  • 作用:加速CPU和主内存之间数据流转,降低指令/数据访问延迟。
  • 特性:极快极小,只缓存近期活跃数据,由硬件自动管理。
实战要点
  • 算法实现需关注数据局部性。例如,数组顺序遍历比链表随机访问有更高cache命中率。

2. 操作系统页缓存(Page Cache)

  • 作用:提升磁盘读写效率,让频繁访问的文件块常驻内存。
  • 特性:容量大,支持脏页、回收、刷新等机制,由内核统一调度。
实战要点
  • 大文件多次读取时,第一次慢、后续快,即得益于页缓存。
  • kswapd等内核线程定期回收冷缓存页,使用LRU等策略。

3. 应用/中间件缓存

  • 作用:服务层热点数据的高速存取,降低后端压力、减小延迟。
  • 特性:灵活可控,支持多种数据结构与淘汰策略,适用于分布式扩展。
实战要点
  • 业务高并发场景中,热点用户信息、会话、排行榜等用中间件缓存显著提升响应速度。
  • TTL与LRU结合能平衡空间利用与数据新鲜度。

4. 前端/边缘缓存

  • 作用:离用户更近,缓存静态内容,加速页面与资源加载。
  • 特性:按区域、按时间或按需缓存,减轻源站压力。
实战要点
  • CDN缓存静态图片、脚本等,可提升全球访问体验。

四、核心机制与算法解读

1. 命中与未命中(Hit/Miss)

  • 命中:所需数据已在缓存区,直接返回,高速响应。
  • 未命中:未在缓存,需从下级慢速存储取回并补充至缓存。

2. 典型淘汰策略

  • LRU(最近最少使用):优先淘汰最久未用数据,常用于页缓存、应用缓存。
  • LFU(最不常用):优先淘汰访问频率最低的数据,适合分布式缓存。
  • TTL(存活时间):超时即失效,适合Web缓存和临时业务对象。

3. 一致性与失效处理

  • 多级缓存需关注数据一致性。缓存更新、失效策略、回写或主动刷新机制都要根据业务需求设计。
  • 部分场景下,可用订阅/通知、延迟双删等手段保证一致性。

五、优化实战与典型代码

1. CPU缓存友好实践

// 顺序遍历二维数组:空间局部性佳,cache命中率高
for (int i = 0; i < N; i++)
    for (int j = 0; j < N; j++)
        sum += a[i][j];

反例:
sum += a[j][i]; // 跨行访问,空间局部性差,容易cache miss


2. 应用层热点数据缓存(伪代码)

user = cache.get("user:123")
if not user:
    user = db.query("select * from user where id=123")
    cache.set("user:123", user, ttl=300)

六、常见疑问与实践要点

Q1: 缓存层级越多越好吗?
A: 并非如此。缓存层级过多会带来一致性管理复杂、时延不可控等问题。应按业务场景合理设计。

Q2: 缓存如何衡量效果?
A: 关注命中率、平均响应时间、资源占用等指标。

Q3: 为什么缓存会失效?
A: 数据过期、容量满、主动清理、更新驱动失效等原因。

Q4: 所有数据都要缓存吗?
A: 只缓存热点、高频、对延迟敏感且可容忍偶尔不一致的数据。冷数据和大对象不建议缓存。


七、总结与建议

  • 缓存不是越多越好,需结合业务特性、数据访问模式与可维护性科学设计。
  • 不同层级缓存原理、管理方式、适用范围均不同,需按需取用、合理分工。
  • 掌握缓存体系的分层原理与优化要点,是打造高性能系统的关键能力。


📖 推荐阅读:《Yocto项目实战教程:高效定制嵌入式Linux系统》
🎥 更多学习视频请关注 B 站:嵌入式Jerry


架构师必知必会系列:多层次缓存与缓存策略 作者:禅与计算机程序设计艺术 1.简介 在互联网服务架构中,缓存通常被用来提升系统性能和降低延迟,它是指将用户请求重复的计算结果进行存储,以便后续访问时直接获取结果而不需要重新计算,从而提高用户体验、减少服务器压力和节省成本。 多层级缓存(multi-level cache)可以有效降低后端数据库查询次 阅读详情

相关推荐

Omnibox 2.11 NAS部署指南:家庭影音中枢的轻量化落地实践

家庭影音平台本质是本地化内容调度中枢,其核心在于聚合NAS媒体库、统一管理直播/IPTV/音频/视频等多源内容,并通过智能元数据匹配与硬解加速实现零门槛播放体验。技术原理上依赖Java轻量Web容器(Jetty)、SQLite嵌入式数据库双缓存架构,以及宿主机FFmpeg动态链接与HTTP/2直播代理治理能力。该方案显著降低4K播放卡顿、EPG加载失败、海报缺失等高频问题,适用于群晖、飞牛、绿联等主流NAS设备,尤其适配ARM64芯片与Realtek网卡等国产硬件生态。本文聚焦Omnibox 2.11在真实

weixin_30846347的博客 469

分层缓存之最终分布式缓存

分层缓存 一、缓存概念 1、概念 用于存储数据的硬件或软件的组成部分,以使得后续更快访问相应的数据,缓存中的数据肯呢个是提前计算好的结果、数据的副本等。 2、作用 缓存是分布式系统中的重要组建,主要解决高并发、大数据场景下热点数据访问的性能问题,提供高性能的数据快速访问。 3、原理 a、将数据写入读写速度最快的存储设备。 b、将数据缓存到离应用最近的地方。 c、将数据缓存到离客户最近的地方。 二、...

weixin_41700804的博客 850

publisher与subscriber话题的消息类型md5sum不一致问题

[ERROR] [1604235557.591296096]: Client [/range_vision_fusion_01] wants topic /detection/vision_objects to have datatype/md5sum [autoware_msgs/DetectedObjectArray/13415342e539aa36ea9a6f04ffaf39b4], but our version has [autoware_msgs/DetectedObjectArray/c16a

cxhmike的博客 6619

缓存总结

缓存对于每个开发者来说是相当熟悉了,为了提高程序的性能我们会去加缓存,但是在什么地方加缓存,如何加缓存呢? 假设一个网站,需要提高性能,缓存可以放在浏览器,可以放在反向代理服务器,还可以放在应用程序进程内,同时可以放在分布式缓存系统中。 缓存策略图 从用户请求数据到数据返回,数据经过了浏览器,CDN,代理服务器,应用服务器,以及数据库各个环节。每个环节都可以运用缓存技术。 从浏览...

hellozhxy的博客 705

别光看教程了!手把手带你用STM32F103C8T6最小系统板点亮第一个LED(附完整电路图)

本文详细介绍了如何使用STM32F103C8T6最小系统板点亮第一个LED,从硬件连接到软件开发环境搭建,再到编写和下载程序,手把手教你完成STM32入门的第一步。适合初学者快速上手STM32开发,附完整电路图和代码示例。

weixin_28678831的博客 193

DeepSeek:为文化创意产业注入AI新动能

沪南胜境,闵行新章。随后,2024 年 5 月,DeepSeek 宣布开源第二代 MoE 大模型 DeepSeek-V2,以其比肩 GPT-4Turbo 的卓越性能,以及仅为 GPT-4 百分之一的价格优势,迅速在市场中掀起波澜,收获了 “AI 届拼多多” 的独特名号,让更多人看到了高性价比 AI 大模型的可能性。创作者自身也应提高对创作伦理的认识,树立正确的创作观念,在使用 AI 工具时,保持对创作的主导权,充分发挥自己的创造力和想象力,将 AI 作为创作的辅助工具,而不是替代品。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 1962

Ceph存储分层

存储分层也叫cache分层、缓存分层;主要作用是提高Ceph存储性能。

niuanxins的专栏 3920

国自然基金申请书撰写新思路:如何合理利用AI提高本子竞争力?

最后给大家推荐的400多所高校教师都在用的AI平台——高级学术版专业应用平台,集成了国际主流学术应用,以及ChatGPT、Claude、Gemini、Grok等Al大模型的高级版本平台,还有,可以辅助大家高效完成科研和学术写作任务,当然撰写硕博论文,课题、职称论文、国社科、国自然基金本子也是手拿把掐。创新点、技术路线、前期基础,但是我们也可以把写好的初稿交给AI,让它扮演资深研究员,帮我们精炼表述、优化段落结构,并揪出可能被评审追问的逻辑漏洞。,我们需要的是让它帮我们理清楚思路,而不是让它替我们完成内容。

智能AI让学术科研更容易 663

深入缓存核心技术:大型网站多级缓存的分层架构

在互联网高速发展的今天,缓存技术被广泛地应用。无论业内还是业外,只要是提到性能问题,大家都会脱口而出“用缓存解决”。 这种说法带有片面性,甚至是一知半解,但是作为专业人士的我们,需要对缓存有更深、更广的了解。 缓存技术存在于应用场景的方方面面。从浏览器请求,到反向代理服务器,从进程内缓存到分布式缓存。其中缓存策略,算法也是层出不穷,今天就带大家走进缓存。 正文 缓存对于每个开发者来说是相当熟悉了,...

资料免费分享,点击名片 251

携程机票数据爬取实战:使用 Python 获取携程网机票信息

通过本篇博客,我们详细介绍了如何使用 Python 爬取携程网的机票信息,涉及了静态网页爬取(使用 Requests 和 BeautifulSoup)和动态网页爬取(使用 Selenium)两种方法。通过获取的数据,我们不仅能够进行票价分析,还可以构建更为复杂的预测模型或趋势分析工具。爬虫技术不仅能够帮助我们收集有价值的数据,还能够为商业决策提供数据支持。在实际应用中,我们可以结合更多的分析方法,如自然语言处理、图像处理等,进一步提升数据的价值。

2201_76125261的博客 1657

15、基于最优传输的协作多视图聚类框架

本文提出了一种基于最优传输理论的协作多视图聚类框架,通过引入协作学习机制在不同视图间建立先验交互,以提升共识聚类的质量。框架包含两种新方法:协作共识投影方法(CoCP)和基于新表示的协作共识方法(CoCNR)。CoCP在全局空间中整合多视图信息并进行共识投影,而CoCNR则通过协作编码生成新的数据表示以实现更优聚类。方法利用熵正则化的Wasserstein距离与Wasserstein重心,有效捕捉数据分布间的几何结构,并通过聚合步骤获得统一模型。实验结果表明,所提方法在多个数据集上均优于现有方法,具有良好的

gpt4scribbler的博客 85

图解大型网站多级缓存的分层架构

缓存技术存在于应用场景的方方面面。从浏览器请求,到反向代理服务器,从进程内缓存到分布式缓存,其中缓存策略算法也是层出不穷。假设一个网站,需要提高性能,缓存可以放在浏览器,可以放在反向代理服务器,还可以放在应用程序进程内,同时可以放在分布式缓存系统中。从用户请求数据到数据返回,数据经过了浏览器,CDN,代理服务器,应用服务器,以及数据库各个环节。每个环节都可以运用缓存技术。

ReturnTmp的博客 1882

华为OD机考双机位C卷 - 斗地主之顺子 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 斗地主之顺子(OD上机考试双机位C卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 9692

Redis分层缓存

Redis分层缓存(尤其是L1/L2/L3架构)是构建高性能、高可用应用的基石技术。它通过将数据分级存储,巧妙地平衡了速度、容量和成本。L1 本地缓存:解决速度问题,应对极致热点。L2 Redis:解决容量和共享问题,应对主要热点。L3 数据库:解决持久化和全量数据问题,是数据的最终保障。理解和运用好这套架构,你的聊天服务器性能将得到质的飞跃。

2301_80355452的博客 1327

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

架构师必备,了解分层架构中缓存那点事儿

无论是CDN缓存加速,还是CPU的三级缓存,又或者是在如今互联网时代流量红利所带来的高并发结构客户端,而不得不使用缓存架构。缓存,对于技术人来说,是一个必须直面的名词。 然而,如何清晰明了的选择缓存服务以及如何在设计架构时使用缓存去优化业务,对于我们很多人来说,一直以来都比较迷惑,本文从这一点出发,简单介绍了缓存概念和分布式缓存服务的一些应用场景。 缓存的必...

优快云资讯 2177

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

订单列表中添加分层缓存的方法

1说明:项目中使用node.js

龙cc的博客 866

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

CACHE TIERING缓存分层

A cache tier provides Ceph Clients with better I/O performance for a subset of the data stored in a backing storage tier. Cache tiering involves creating a pool of relatively fast/expensive storage de

yangyimincn的专栏 5811

服务端需要一个新的分层 -“数据缓存层”

一. 背景 使用数据缓存在WEB工程中是一个非常有意义的策略,不仅仅可以减少数据库负载,而且当数据缓存在内存中,能大大提高了的读取速度。 在WEB设计中,我们往往忽略一个重要的信息 – Key,每当我们需要缓存的时候,只是单纯的对一个Key进行SET或者GET操作,时间长了,也许就出现了以下的问题: 这个数据缓存的Key是什么;这个数据缓存生命周期有多长;如何不获取这个数据缓存,

lyd518的专栏 4857

Ceph 缓存分层

Ceph Cache Tiering Ceph 缓存分层的基本思想是冷热数据分离,用相对快速/昂贵的存储设备如SSD盘,组成一个Pool来作为Cache层,后端用相对慢速/廉价的设备来组建冷数据存储池( Storage层)。 分布式的集群一般都采用廉价的PC与传统的机械硬盘进行搭建,所以在磁盘的访问速度上有一定的限制,没有理想的IOps数据。当去优化一个系统的I/O性能时,最先想到的就是添加快速的存储设备作为缓存,热数据在缓存被访问到,缩短数据的访问延时。Ceph也从Firefly 0.80版本开始引入这种

lhc121386的博客 1633

浅谈代码级web缓存几个层次的实现

今天抛开编译(opcode缓存)缓存、CDN缓存、web服务器(如nginx)缓存不说,只谈程序能控制实现的缓存方式: 一、本地缓存:    先问个问题,我要发货到辽宁,最牛逼的物流是什么?大货车?高铁?飞机?时光隧道?机器猫?我晕,你还让不让我写下去了。    做过物流的应该知道,最厉害的物流不是物联调度系统响应有多快(服务器处理能力),运输工具有多快(传输速度),也不是你同时能发多少

程序老兵的博客 2961

DNS 不是把域名翻译成 IP:递归解析、TTL 缓存、CNAME 与报文排错实战

本文通过离线Python实验,拆解DNS递归解析、缓存机制与报文结构,揭示“DNS不是全局映射表”的本质。重点解析递归器角色、TTL衰减、CNAME链处理、负缓存隔离及修改记录延迟生效等核心问题,结合实战排错案例,阐明缓存层级、事务匹配、截断处理与安全边界,强调从应用到权威的逐层排查逻辑,实现可复现、可验证的DNS教学系统。

此人很懒,什么都没有写~~ 348

Spring Boot 工程通用能力建设:声明式事务定制与 Redis 缓存实践

本文探讨Spring Boot中声明式事务的进阶实践,通过解耦“切点”与“事务属性”,实现灵活控制。核心包括:基于方法名的只读规则(如get*、find*自动设为只读),组合事务属性源确保@Transactional注解优先于命名规则,以及自定义切点实现事务统一织入。该方案提升代码可维护性,避免误写,同时支持特殊场景覆盖,构建更健壮的事务治理体系。

BADAO_LIUMANG_QIZHI的博客 240

缓存该删还是该改,LLM 服务里的双写问题

给答案加缓存之后,命中率上去了,账单下来了。然后开始出现一类很难查的问题,同一个问题,五分钟后问一次得到新答案,再问一次又回到旧答案。用户以为系统在抽风。这类问题的根源在双写。数据变了,数据库和缓存都要动,两个地方不是原子的,中间那段窗口就会出不一致。而缓存这种不一致一旦形成,可能一直存在,直到过期。

m0_58155849的博客 186

输送线节拍与缓存设计:线体平衡计算、积放系数与上下游能力匹配方法

输送系统的能力由瓶颈段决定,设计目标是让各段节拍匹配并留出可控缓存。三个核心计算:①段能力 C = 3600·v/(s + l)(件/h,v 线速度 m/s,s 货物间距 m,l 货物长度 m);②上下游匹配要求 C下游 ≥ 1.1·C上游;③缓存容量 B ≥ (Q峰 - C下游)·t,用于吸收短时高峰。缺了缓存,短时波动会直接转化为上游停线与货物顶推。

NaiLiShuXie的博客 226

Token工厂技术拆解(11月9日)|多付218块的那个月:提示词开头写了日期,缓存一次没命中

6 万字里只留真正被问到的 2 万字,约 13,000 个 token,其余做成按需检索。每次 0.039 元,一天 330 次是 12.87 元,月 283 元。注意,283 元和第二条的 287 元差不多,可它花的人力是第二条的好几倍。这条最贵,要搭检索、要试两周,人比钱贵。别踩的三个坑:坑一,以为开关一开就有缓存。多数平台要你在内容里标出"从哪断开",不标就整段硬碰,碰不上就是零。坑二,忘了 5 分钟就过期。隔半小时再问,等于重新写一次,还是 1.25 倍。坑三,把用户的问题也塞进缓存段。

李文慧 中国开源充电桩平台第一人;李文慧 国内知名开源工作者 全栈工程师 华为云最具价值专家 9

WooCommerce 运费不显示或结账运费为 0:先核配送区域与运费类,再查缓存与主题/插件覆盖

—购物车能加购、结账表单也能填,就是算不出该有的运费——这和今日写过的 Cloudflare Flexible SSL /、后台极慢 Heartbeat / 修订 / autoload、

20年技术经验|专注小程序+外贸独立站|已服务500家企业,分享创业中有趣的产品和技术经验。 259
上一篇: LRU缓存机制完全实战:链表的工程落地与面试通关
下一篇: 数据结构基础练习 | 单链表操作全套实战与复盘
嵌入式孙老师
博客等级 码龄7年 5687粉丝 899原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值