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

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

1.  依赖默认的序列化。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

英文出自:highscalability

10个常见的缓存使用误区相关推荐

  1. 10个常见的Android 新手误区

    在过去十年的移动开发平台中,作为资深的移动开发人员,我们认为Android平台是一个新手最广为人知的平台.它不仅是一个廉价的工具,而且有着良好的开发社区,以及从所周知的编程语言(Java),使得开发A ...

  2. 转:10个常见的 Android 新手误区

    转自:http://www.oschina.net/question/157182_61140 1.不读Android开发文档 Android开发者网站可以很好的帮助你.很多的文档也可以通过SDK工具 ...

  3. Java 常见的 30 个误区与细节

    转载自 Java 常见的 30 个误区与细节 1.在Java中,没有goto语句.因为大量使用goto语句会降低程序的可读性和可维护性,所以Java语言取消了goto的使用.同时,为了避免程序员自行使 ...

  4. 常见的大数据误区有哪些

    大数据对所有企业都有合理的承诺,无论其规模如何.通过大数据分析,企业可以获得洞察力,帮助他们不仅可以增加收入,还可以了解他们的服务和产品中的差距. 让我们来看看最常见的大数据误区 作为一项不断发展的技 ...

  5. 阿里云王牌架构师杨曦:也谈系统缓存设计误区及高阶使用技巧

    阿里云高级解决方案架构师 杨旭 世界最大混合云的总架构师,4年前,开始作为双11阿里云技术负责人,负责搭建全球最大的混合云结构,把 "双11"的电商业务和技术场景在阿里云上实现,并 ...

  6. 10个常见的前端手写功能

    10个常见的前端手写功能 1.防抖 2.节流 3.深拷贝 JSON方法 递归拷贝 4.手写Promise 5.异步控制并发数 6.继承 ES5 继承(寄生组合继承) ES6继承 7.数组排序 sort ...

  7. 10个常见的前端手写功能,你全都会吗?

    万丈高楼平地起,地基打的牢,才能永远立于不败之地.今天给大家带来的是10个常见的 JavaScript 手写功能,重要的地方已添加注释.有的是借鉴别人的,有的是自己写的,如有不正确的地方,欢迎多多指正 ...

  8. 4种常见的缓存模式,你都知道吗?

    概述 在系统架构中,缓存可谓提供系统性能的最简单方法之一,稍微有点开发经验的同学必然会与缓存打过交道,最起码也实践过. 如果使用得当,缓存可以减少响应时间.减少数据库负载以及节省成本.但如果缓存使用不 ...

  9. 如何连接ipv6服务器_IPv6系列初学者的10个常见困扰

    本文是<IPv6系列>文章的第二篇<常见困扰>,紧接<入门指南>,用于解答IPv6的10个常见困扰. 小慢哥的原创文章,欢迎转载 目录 ▪ 本文缘由 ▪ 困扰1. ...

最新文章

  1. 鸿蒙系统的功能如何,华为鸿蒙系统发布会,这个功能怎么那么像小米MIUI的
  2. AI时代!我选Python因为Python是人工智能的未来
  3. 获取SAP HR模块中员工照片及照片URL的方法
  4. mysql 下 计算 两点 经纬度 之间的距离 计算结果排序
  5. Uipath 学习栏目基础教学:11、录制
  6. 阿里云服务器 搭建单体redis 以及踩坑
  7. 请求接受json tp5_关于jq jsonp跨域请求错误处理bug
  8. Netty工作笔记0058---Netty群聊系统客户端
  9. 从Java角度学JavaScript
  10. 搜狗发布全球首位 3D AI 主播,背后分身技术有玄机
  11. 使用Opencv分离图像通道/合并图像通道
  12. PPT修改母版页码格式后不管用?
  13. java的cursor_JAVA中类 Cursor的定义.
  14. 舵机常见问题原理分析及解决办法
  15. 直击六大会场 | 洞察100+创新实践,2018TOP100summit圆满落幕!
  16. AlphaCode 惊世登场!编程版“阿法狗”悄悄参赛,击败一半程序员
  17. 体素滤波算法python实现
  18. 电脑删除的文件如何找回?
  19. 什么是指用计算机,cat是指计算机的什么
  20. 《Android之大话设计模式》--设计原则 第三章:开放封闭原则 孙悟空任弼马温一职

热门文章

  1. LSGO软件技术团队2015~2016学年第五周(0928~1004)总结
  2. 【转】对称加密和分组加密中的四种模式(ECB、CBC、CFB、OFB)
  3. 【转】3.5(译)构建Async同步基元,Part 5 AsyncSemaphore
  4. Linq to SQL之使用事务
  5. VS静态库和动态库的区别
  6. PWN-PRACTICE-BUUCTF-9
  7. linux shell跳板机,用shell开发跳板机
  8. 【POJ - 1961】Period(KMP,循环节问题)
  9. C++中两个常用的控制语句格式的函数(width和precision函数)
  10. Linux中软件安装使用的命令是,Linux软件安装命令