写点什么

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

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

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

关注

评论

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

架构1期-第二周作业一

道长

极客大学架构师训练营

食堂就餐卡系统设计

谭明华

极客大学架构师训练营

架构师第二周总结

悠哉

const关键字应用总结

C语言与CPP编程

程序员 编程语言 C语言

开放的是金融服务 必须确保持牌经营

CECBC

金融 银行

小白也能看懂的REDIS教学基础篇——REDIS基础数据结构

Java 数据库 redis

周总结二

何毅曦

flutter 中的video player对比学习

Daniel

linux虚拟摄像头vivid配置

良知犹存

Linux 虚拟摄像

超全算法笔试模拟题精解合集,这份《程序员面试宝典》简直太牛了

Java架构之路

Java 数据结构 面试 算法 编程语言

第二周 作业一【未陌】

a d e

设计模式 架构设计原则 基本原则

第二周 作业二:框架设计学习总结【未陌】

a d e

设计模式 架构设计

腾讯某Java程序员为了肝出《300页图解网络知识》+《计算机底层操作系统》超全教程差点猝死!

Java架构之路

Java 程序员 面试 编程语言 操作系统

听说有人不了解柔性数组

C语言与CPP编程

程序员 数组 编程语言 C语言

架构师训练营 - week1 - 个人学习心得总结

谭明华

第二周学习总结

饭桶

区块链+跨境贸易:让跨境数据高效共享可信

CECBC

区块链 跨境贸易 跨境电子商务

最新整理国内知名大厂7篇Java岗面试真题,奥利给!

Java架构师迁哥

架构师训练营第二周学习总结

Gosling

极客大学架构师训练营

数据结构与算法:递归

Java架构师迁哥

Java 编程 程序员 算法

原来我写的软件里面都是臭味 - 架构师训练营第 1 期 - 第二周总结

Todd-Lee

极客大学架构师训练营

2020年高频Java面试题集锦(含答案),让你的面试之路畅通无阻!

Java架构之路

Java 程序员 面试 编程语言

架构师第二周作业

悠哉

极客大学架构师训练营

第二周作业

饭桶

第二周作业

华美而火锅

UML练习2

何毅曦

第二周作业二-学习总结

道长

极客大学架构师训练营

架构师训练营 - week2 - 个人学习心得总结

谭明华

极客大学架构师训练营

C语言/C++基本语句编程风格

C语言与CPP编程

程序员 编程语言 C语言

极客时间架构师培训 1 期 - 第 2 周作业

Kaven

框架设计-第二周作业

睁眼看世界

极客大学架构师训练营 软件设计原则

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