10个常见的缓存使用误区

摘要:在日常工作中,开发者经常利用缓存来进行优化站点或优化应用程序。但在实际应用中,在使用缓存时,总是那么不尽如意。这什么原因呢?本文,笔者收集了最为常见的十大缓存误区以及使用建议。

在日常工作中,开发者经常利用缓存来进行优化站点或优化应用程序。但在实际应用中,在使用缓存时,总是那么不尽如意。这什么原因呢?本文,笔者收集了最为常见的十大缓存误区以及使用建议。我们一起来看下 :

1.  依赖默认的序列化。

默认的序列化处理方式可能会消耗大量的CPU资源,特别是处理复杂类型数据时。所以建议要根据语音和环境的不同,采用最优化的序列化和反序列化方式。

2.  在单一缓存中存储大对象数据。

由于序列化和反序列化需要一定的资源开销,处于并发负载时,大对象图形数据的频繁读取有可能会让服务器的CPU崩溃。相反,不妨考虑把大对象数据打散为较小的子对象,之后再各自进行缓存。根据你的需求读取最小的数据单元。

3.  在不同进程间使用缓存共享对象。

出现竞态条件(Race conditions)时,当写进程也参与其中,同时刚好程序的某部分也访问同一缓冲对象,情况会变得更坏。采取外部锁机制是有必要的。

4.  储存数据后立马进行缓存。

千万不要仓促行事,即使是刚写入不久,当存储资源紧张时,一个缓存足以阻碍程序运行。所以用代码来进行缓存空值返回检查是很有必要的。

5.  使用嵌套对象存储全集合。

由于序列化的影响,执行一次全集合存储会导致程序运行变慢。有鉴于此,单独对独立对象进行缓存可以实现分开读取,减少序列化影响。

6.  对父子对象采取统一与单独混用的存储方式。

有时候一个对象可能拥有两个或更多的父对象。根据统一对象本身的键进行缓存以便不会把同一对象存储于不同地方,这样父对象可以按需访问子对象。

7.  对配置信息进行缓存。

使用进程的本地静态变量来存储配置数据。缓存数据访问是有代价的,所以要尽可能把影响减到最低。

8.  对活性对象进行缓存,例如:流,文件,注册信息或者网络。

不要尝试对上述等包含引用信息的活性对象进行缓存。因为当缓存数据被删除后,之前缓存的活性对象不会被删除,这样会造成系统资源泄漏。

9.  对同一对象采取多键存储。

这样或许在使用一个键和索引号来进行访问时带来便利。如果一个缓存是in-memory的,这样做是可行的,因为缓存中包含了同一对象的引用信息,也就是说一旦该对象发生变更,都可以透过两边的访问路径进行查看。如果是远程(外部)缓存,任何变更的发生都是不可见的,所以这样会导致同步问题的产生。

10.在连续存储中进行更新或删除后没有及时更新相应缓存对象。

在一个远程缓存中,数据以拷贝方式存储,所以当更新对象时,缓存不会被同步更新。缓存必须被明确指定,才能根据变更而进行更新。在in-memory缓存中,一个对象发生的变更是对所有人可见的。在删除时情况类似,删除一个对象时,在缓存中不会被同步删除。这取决于程序本身如何确保缓存对象被正确删除。

英文出自:highscalability

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/447385.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十种程序语言帮你读懂大数据的“秘密”

摘要:经过数年发展,当下大数据领域已充斥着各种各样的分析工具,那么如何才能选择自己适合的。本文从R、Scala、Java、Go、Python等10种语言着手,带大家一览大数据领域的常用工具。 【编者按】面对成千上万条数据记录,…

标准开源产品是打破供应商垄断的关键

Mrten Mickos是美国桉树系统公司的CEO,提出当公司拘泥于自己的设计和定制化时,与他们被供应商锁定所受到的损害程度是相当的。Mickos解释了为什么他认为采用标准开源产品是避免这两种被锁定类型的最好方式。当谈到软件和云服务时,业务锁定是有…

专访阿里云总裁王文彬:做出“用得爽”的工程产品

摘要:已拥有近百万不同行业领域用户的阿里云,在产品开发、服务输出与生态系统建设等方面还将继续加速,多点开花。 回顾在2014年已经过去的半年中,阿里云在产品开发、服务输出与生态系统建设层面的诸多动作。不难看出,…

写代码前的准备,你做好了吗?

我们程序员很容易给别人一种深刻的误解:写代码的。包括我们自己有时候也会陷入这样的圈套之中。很多程序员在接到任务之后,就会马上想着如何用代码来实现,这是一种很不好的做法。其实,在我们写代码之前,还有很多工作要…

周鸿祎:比情怀更重要的硬件创业三定律

7月31日,首届福布斯中国创新峰会于东莞松山湖高新区召开,峰会集结了中国互联网与制造业前沿的商业创新领袖,集中探讨互联网时代如何重铸产业未来。 奇虎360董事长周鸿祎首先就互联网创新阐述了自己对硬件和制造业未来的看法。他认为互联网催…

C++11(及现代C++风格)和快速迭代式开发

过去的一年我在微软亚洲研究院做输入法,我们的产品叫“英库拼音输入法” (下载Beta版),如果你用过“英库词典”(现已更名为必应词典),应该知道“英库”这个名字(实际上我们的核心开发…

软件系统分析师与架构师技能大PK(您具备了哪些呢?)

软件系统分析师与架构师在职责与技能方面没有明显的界线,你中有我我中有你,同时也有各自自己的世界,很值得拿来比比。 系统分析师职责:告诉我们系统应该做什么。 l 管理到技术的桥梁 各领域业务到信息化技术的通知翻译者。 l 对软件项目进行整…

桌面系统和程序员

本周我出席了OpenStack峰会。在峰会上绝大多数应用部署都是基于Linux的,然而,大家使用的笔记本电脑最多的还是苹果产的。人们写代码,最终要把代码部署到Linux上,但在编码时却使用另外一种不同的操作系统。 最有趣的还是他们使用的…

原型设计工具的对比评测记录(一)

概述:本文是美国的专业设计公司cooper公司的交互设计师Emily Schwartzman所写的一篇对众多原型设计工具的对比评测。这里是前半部分,从总体角度介绍评测及其结果。原型设计工具的对比评测记录(一)原型设计工具的对比评测记录&…

软件开发人员进修必备的20本书

初级软件开发人员进修必备的20本书(上) #原创 程序开发 申请达人,去除赞助商链接开发和编程向来就不是一件轻松的事,有时候你可能需要别人稍微点化一下,或者从书中得到一些有用的帮助。总而言之,无论是工作流程还是进修你的专业&a…

为什么我喜欢单独编程

大约是一年前,我写了一篇关于我为什么不喜欢结对编程的帖子。此文也是对该帖子的补充。 至今为止我已经在加利福尼亚州科学院工作5个月了。我创建了一个由美国国家科学基金会资助的关于蚂蚁分类学的网站:antcat.org。 这是我作为一个程序员25年以来最棒…

如何看待自己写的烂代码

如果你不是入行不久的新程序员,你很可能会遇到一些你曾经写过的老代码,看到它们,你可能会有这样的反应: 哦,shit!这是什么?当时我脑袋进水了? 我就这样过。我的朋友和同事们都经历过…

给创业者的一些建议

CEO要像个产品经理 就拿我的项目来说,网站的模板设计,视觉体验,操作体验,产品展示,网址等都是不合格的。创始人开始创业其实就是一个产品经理,好好雕琢你的产品。 不做机会最大的,只做自己擅长…

谈操作系统的碎片化和融合

摘要:目前,Android和iOS统治着移动操作系统,桌面端被Windows所主宰,随着智能家居、可穿戴设备等新兴平台的兴起,造成了各家操作系统四分五裂的情况,但在不久的将来他们终究会走向融合。 目前,An…

盘点大数据的十大发展方向,Scale-out将成主流

摘要:随着人们对大数据认知的加强,除去特点之外,人们开始更加关注于它的使用价值和未来的服务方向。本文列举了大数据的十大发展方向,其中Scale-out将成为主流。 【编者按】如今,大数据俨然成为IT领域最受关注的热词之…

程序员的成功是否有规律可循?

摘要:自然界中存在许多规律,那么在程序人生上是否有规律可循呢?这种规律是如大多数人期望的那样吗?V众投发起人李智勇对此进行了探讨,他分析了必然与偶然、本质与细节,并就程序人生规律的三要素进行了解读。…

S​D​I​与​A​S​I 接口详解介绍

分量编码 在对彩色电视信号进行数字化处理和传输是,一种常用的方式是分别对其3个分量(Y,R-Y,B-Y)进行数字化编码。这就是分量分量编码,另外还有全信号编码,全信号编码是对彩色全电视信号直接进行…

FFMPEG解码多线程

FFMPEG多线程解码 FFMPEG多线程编码器一般以在Slice内分功能模块进行多线程编码,如h263,h263P,msmpeg(v1, v2, v3),wmv1。包含以下几个线程:(1)Pre_estimation_motion_thread运动估计前的准备;(2)Estimation_motion_t…

SpringNBoot日志配置

市面上的日志框架 日志门面 (日志的抽象层)日志门面 (日志的抽象层)JCL(Jakarta Commons LoggingSLF4j(Simple Logging Facade for Java) jboss-loggiJUL(java.util.logging&#x…

ffmpeg的内部Video Buffer管理和传送机制

本文主要介绍ffmpeg解码器内部管理Video Buffer的原理和过程,ffmpeg的Videobuffer为内部管理,其流程大致为:注册处理函数->帧级释放->帧级申请->清空。 1 注册get_buffer()和release_buffer() FFAPI_InitCodec() avcodec_alloc_c…