写点什么

在使用缓存时应该注意哪些问题?

  • 2015-09-21
  • 本文字数:882 字

    阅读完需:约 3 分钟

缓存是个好工具。许多有用的数据都适合放在内存中。那样可以降低延迟,减轻数据库负载,减少硬件成本。但实际上,缓存的成本很高,只是软件开发人员往往低估了缓存带来的问题和复杂度提升。近日,来自 Twitter 的软件工程师 Mike Solomon 发表了一篇博文,从以下几个方面分析了实现缓存的困难之处:

  • 缓存数据更难以推断:缓存意味着不从真实数据源读取数据。因此,每次读或写缓存数据都可能与真实数据源不匹配。在问题追踪时必须经常考虑这种情况。
  • 缓存数据可能导致“视角(perspective)”Bug:比如,一个新闻站点上有个“最佳文章”列表,其中的内容可能会随登录用户的不同而变化。一个常犯的缓存错误是缓存的数据独立于视角,具有不同视角的用户看到了相同的内容。这会导致严重的隐私甚或安全问题。
  • 涉及缓存的行为难以重现:当引入缓存,就引入了一个新的层,其上的行为可能同预期不符。缓存对象依赖访问模式,会随时间或其它因素变化。一旦出现问题,很难通过重现行为来帮助问题修复。
  • 访问模式变化可能会损害性能:访问模式变化可能会莫名其妙地导致缓存命中率降低,延迟增加,吞吐量减少。但流量水平可能会保持不变,这屏蔽了问题原因,潜在地增加了底层数据源的负载及问题处理的难度。
  • 进程内缓存可能会增加 GC 压力:在具有垃圾收集功能的语言中,大量长寿命的缓存对象会增加垃圾收集的时间和次数。
  • 缓存失败恢复困难:缓存机器故障,存储在内存中的数据就会丢失,无法简单地重新上线。在缓存重新创建的过程中,吞吐量可能会下降。

尽管缓存有着这些困难,但还是需要它,比如, Facebook、Twitter、Instagram 及 Reddit 都将缓存视为一个关键的基础设施。Facebook 基础设施工程师已经构建了一个名为 mcrouter 的工具用于管理缓存。该工具开源不到一年,就获得了1000 多颗星,缓存的重要性可见一斑。只是,在考虑使用缓存的时候需要注意上述问题。


感谢徐川对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-09-21 19:003851
用户头像

发布了 1008 篇内容, 共 389.4 次阅读, 收获喜欢 344 次。

关注

评论

发布
暂无评论
发现更多内容

CSS之选择器

Augus

CSS 12月日更

EasyRecovery如何恢复ps的psd文件

淋雨

数据恢复 EasyRecovery

Redis分布式锁的正确使用

编程江湖

redis java编程

uni-app技术分享| uniapp实现直播旁路推流

anyRTC开发者

uni-app 音视频 视频直播 视频通话 旁路推流

🍃【Spring专题】「实战系列」spring注解@ConditionalOnExpression详细使用说明

洛神灬殇

spring Spring Framework Condition 12月日更 ConditionOnExpression

Linux一学就会之重定向和文件的查找(Linux下一切皆文件)

学神来啦

Linux 运维 linux云计算 linux一学就会

【混合云小知识】混合云应用场景包含哪些?

行云管家

云计算 混合云

结算中心全国集中化支撑解决之道

鲸品堂

搞定react源码 惊艳面试官

buchila11

React

The Data Way Vol.7|从故事里寻找开源的『内核』

SphereEx

Apache 开源 播客 Meetup SphereEx

埃文科技上榜CCSIP 2021中国网络安全产业全景图3大安全模块

郑州埃文科技

网络安全 ip技术 全景图

「MySQL」数据库备份和还原

恒生LIGHT云社区

MySQL 数据库 MySQL 数据库

华为云应用构建技术实践精选集

华为云开发者联盟

云计算 华为云 内容合集 技术专题合集 应用构建

如何用GoldWave将音频添加生成机械化音效

懒得勤快

API标准化对Dapr的重要性

行云创新

大数据开发之Hadoop家族都有谁

@零度

大数据 hadoop

怎么排查是哪里出现了数据倾斜

编程江湖

大数据 数据倾斜

热门盘点:企业该如何对待低代码?应不应该选择低代码?

优秀

低代码

产品经理进阶(一)Web APP UI一致性设计

No Silver Bullet

产品经理 12月日更

【喜讯】尚硅谷西安分校成立啦

@零度

尚硅谷 西安分校成立

Vue.js 的九个性能优化技巧

编程江湖

Vue 大前端

羊肉泡馍我们来了,尚硅谷西安分校设立首期特惠

编程江湖

编程开发

再添神器!Paddle.js 发布 OCR SDK

百度开发者中心

OCR paddle.js

伴鱼基于 Flink 构建数据集成平台的设计与实现

Apache Flink

大数据 flink 编程 后端 实时计算

解析云原生2.0架构设计的8大关键趋势

华为云开发者联盟

云原生 架构设计 数据治理 存算分离 分布式云

一个渐进式微前端框架 - Fronts

RingCentral铃盛

架构 大前端 测试 经验分享

零代码训练营第七期本月启动,现正开放报名!

明道云

学习react源码 征服面试官

buchila11

React

保险行业办理过等保选择哪家好?有成功案例吗?

行云管家

网络安全 等保 等级保护 等保2.0

万字详解什么是生成对抗网络GAN

华为云开发者联盟

算法 推荐算法 GAN 强化学习 生成对抗网络

30个类手写Spring核心原理之环境准备(1)

Tom弹架构

Java spring 源码

在使用缓存时应该注意哪些问题?_语言 & 开发_谢丽_InfoQ精选文章