写点什么

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

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

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

关注

评论

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

Yii2.0 RESTful API 认证教程

Middleware

php RESTful Yii2

技术工作的一二三之快餐

拖地先生

项目管理 软件开发 技术管理 软件开发流程

Yii2.0 RESTful API 基础配置教程

Middleware

php RESTful Yii2

如何用五步建设数据中台?

博文视点Broadview

大数据 数据中台 架构 中台

将footer固定在底部: Flexbox vs Grid

寇云

CSS css3

JVM最佳学习笔记<四>---虚拟机类加载机制

Loubobooo

Java JVM

DevOps知识点——3C知多少

禅道项目管理

DevOps 测试 持续集成

Yii2.0 RESTful API 之版本控制

Middleware

php RESTful Yii2

技术工作的一二三之内功

拖地先生

个人成长

七年老程序员面试经历

代码诗人

JVM最佳学习笔记<一>---Java内存区域与内存溢出异常

Loubobooo

Java JVM

JVM最佳学习笔记<二>---垃圾收集器与内存分配策略

Loubobooo

Java JVM

JVM最佳学习笔记<三>---虚拟机性能监控与故障处理工具

Loubobooo

Java JVM

简述 HTTP 缓存相关的首部及其行为

黄耗子皮

缓存 HTTP

[JVM] String#intern 面试必会

猴哥一一 cium

Java JVM string pool string Java 25 周年

到底谁是你老板

Neco.W

工作 创业心态

钱从哪里来 - 中国家庭的财富方案

石云升

读书笔记 工作 财富 买房 资产配置

Yii2.0 RESTful API 之速率限制

Middleware

php RESTful Yii2

一周信创舆情观察(5.18~5.24)

统小信uos

基础软件 操作系统

如何成为高手: 到知识的源头去

lmymirror

学习 方法论 高手

ESP8266远程控制+MicroPython 固件初体验

黄耗子皮

物联网 esp8266

技术工作的一二三之价值观方法论

拖地先生

个人成长 方法论

2020年全球经济萎缩,飞链热交易所逆袭而来闪耀数字经济

极客编

运维那点事 - jenkins流水线

yann [扬] :曹同学

运维与云

yann [扬] :曹同学

JVM最佳学习笔记---总览

Loubobooo

Java JVM

最长回文算法(马拉车算法)分析

Gadzan

Java 算法 LeetCode

介绍一下自研开源NLP工具库---MYNLP

陈吉米

自然语言处理 中文分词 mynlp nlp

OAM v1alpha2 新版:平衡标准与可扩展性

孙健波

RocketMQ broker.properties

李绍俊

RocketMQ

Python 沙盒环境配置

黄耗子皮

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