写点什么

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

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

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

关注

评论

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

作业 - 第四周

eva

在游戏运营行业,Serverless 如何解决数据采集分析痛点?

阿里巴巴云原生

Serverless 运维 云原生 关系型数据库 消息中间件

AI窥人(二):彻底“AI化”怎么样?

脑极体

MyBatis专栏 - 关联查询中的延迟加载

小马哥

Java mybatis 七日更 二月春节不断更

一周信创舆情观察(2.1~2.7)

统小信uos

作业 - 第四章 业务流程与产品文档 (一)

hao hao

产品经理训练营作业 03

KingSwim

容器 & 服务:Jenkins构建实例

程序员架构进阶

容器 持续集成 七日更 28天写作 2月春节不断更

微信朋友圈发动态用例及流程图(学习模拟):

🙈🙈🙈

极客大学产品经理训练营

Qcon现代数据架构-《万亿级数据库MongoDB集群性能数十倍提升优化实践》核心17问详细解答

gmoy-tencent

MySQL 数据库 mongodb 分布式 分布式数据库mongodb

helm入门教学

三丰SanFeng

Kubernetes k8s Helm

第四周总结

Jove

干个副业开个小店的简单分析

boshi

创业 副业赚钱 七日更

技术文档丨循迹搭建--车辆集成

百度开发者中心

第四周 开启新的篇章,打磨产品的最强辅助——文档

小匚

极客时间 产品经理 产品经理训练营

关于产品文档与原型的思考

妹妹10分钟就玩懂了零拷贝和NIO,也太强了

moon聊技术

Java nio 零拷贝

第四周

Jove

产品经理训练营--第四周学习总结

月亮 😝

用例图

Eva

羚羊行走在悬崖边:一份报告背后的移动开发者“自救计划”

脑极体

产品经理训练营 - 第四章作业 (一)

joelhy

产品经理训练营

云原生中间件的下一站

apache/dubbo-go

微服务 云原生 dubbo 中间件

惊呆,一条sql竟然让oracle奔溃了

君哥聊技术

oracle mybatis 批量操作

产品0期 - 第四周作业

曾烧麦

产品训练营

第四章作业

白知之明

产品0期 - 第四周作业 - 附件1

曾烧麦

产品训练营

流媒体传输协议之 RTP (上篇)

阿里云CloudImagine

音视频 流媒体 rtp

【百度官方技术分享】中间件技术在百度云原生测试中的应用实践

百度Geek说

产品 架构 测试 中间件 技术宅

第四周作业-用例文档

Au revoir

前端工程师必须知道的用javaScript刷新当前页面的3种方法

孙叫兽

JavaScript 大前端 刷新

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