2025云栖大会,开启通往AGI的未来之旅 了解详情
写点什么

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

  • 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:004251
用户头像

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

关注

评论

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

新一轮 LaunchPad 热潮形成的根源在哪里,Penpad或成机会

BlockChain先知

ABCDE联合创始人BMAN确认出席Hack .Summit() 2024香港Web3盛会

TechubNews

香港Web3

深入剖析 Java 类属性与类方法的应用

小万哥

Java 程序人生 编程语言 软件工程 后端开发

LaunchPad 市场的复苏,Penpad 成新兴生力军

股市老人

如何使用极狐GitLab 代码推送规则,提高代码质量?

极狐GitLab

vivo 短视频体验与成本优化实践

vivo互联网技术

体验 音视频 成本

【Java21问答】为什么synchronized会PINNED虚拟线程?

袁世超

synchronized ObjectMontior 虚拟线程 Java21

华为云GaussDB支撑农行超级网银业务,性能和稳定性备受认可

华为云开发者联盟

数据库 后端 华为云 华为云GaussDB 华为云开发者联盟

华为云帕鲁服务器-云耀云容器版,到底强在哪?

华为云开发者联盟

服务器 华为云 华为云开发者联盟 幻兽帕鲁

Go 首次冲进前八!曾两次夺得年度编程语言,也曾跌至百名开外 | TIOBE 2 月榜单发布

博文视点Broadview

信创的全称是什么?与非信创有什么区别?

行云管家

IT 信创 国产化 非信创

干货 | 汽车行业研发效能提升的挑战与实践案例

思码逸研发效能

【论文解读】| 通过大语言模型实现通用模糊测试

云起无垠

一文搞懂设计模式—适配器模式

Java随想录

Java 设计模式

LaunchPad 市场的复苏,Penpad 成新兴生力军

石头财经

LaunchPad 市场的复苏,Penpad 成新兴生力军

股市老人

LaunchPad 市场的复苏,Penpad 成新兴生力军

加密眼界

论ai韭菜的自我修养

文思源想

AI 成长感悟 文思源想

Python 开发在未来会有怎样的发展?

算法的秘密

✅对线面试官-单线程能不能实现多并发

派大星

面试突击 Java 面试题

掌握云容器网络:何为ipvs

华为云开发者联盟

开发 华为云 华为云开发者联盟 云容器

Linux操作系统中软件安装

小魏写代码

思码逸荣获汽车数智未来创新峰会“年度数字化创新产品奖”

思码逸研发效能

回顾 | E³CI效能认知与改进论坛,助力企业研发效能度量和提升

思码逸研发效能

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