http://www.cnblogs.com/redcreen/archive/2011/02/15/1955248.html

使用memcache缓存数据,减少对数据库的直接访问,提高网站性能已经成了各大网站最基本的技术.如何更好的提高memcache缓存的利用率及命中次数会在后面的blog中单独介绍,本文主要探讨为何及如何使用本地缓存(java localcache)提高网站性能.

localcache与memcache性能比较

先来个本地缓存与memcache缓存的性能比较,有个直观上的概念

Cache

请求方式

次数

时间

平均

Localcache

hashmap中get请求

1亿

1344ms

0.00001344ms

Memcache

简单的get请求,不做序列化

1万

4437ms

0.4437ms

Db

单表查询(有索引)

   

1-2ms

以上测试在开发机器.生产环境采集的数据显示memcache的一次请求大约在0.2ms左右,如果存储的是java object,那算上发序列化的时间在0.5ms以上.与测试数据在同一个数量级上.

通过以上数据对比,可以得知localcache的效率比memcache高1万倍以上.这个数字让我对使用本地缓存充满了极大的兴趣.

使用localcache会带来哪些问题

localcache有着极大的性能优势,单机情况下,适当使用localcache会使程序的效率得到很大的提升.但在集群环境下localcache就存在很多问题了,主要体现在多个jvm之间cache的同步问题.

有很多框架在这上面做了很多工作,比如ehcache ,主要是通过cache复制(copy或invalidate)来解决,大概的思路是使用消息多播机制,当一个jvm中的数据做了更新操作后,首先更新本jvm内的localcache,然后广播消息,其他jvm接收到消息后更新自己的localcache. 但这种机制可能带来并发操作时出现脏数据的问题,具体见Potential Issues with Replicated Caching.

其他cache产品也遇到类似的问题,不再一一介绍.

那有没有很好的方法来解决localcache的同步问题,从而可以放心的品尝localcache这块"甜饼"呢?

这个问题我也很纠结,通过多种方案的组合及补偿机制似乎可以实现一个完美的方案.但也注定成为了一个复杂的方案.类似的方案可以有如下几种:

1.localcache作为一级缓存,通过广播的方式同步缓存,同时设置缓存过期时间,以达到数据同步和出现脏数据后自动修复的功能.

2.localcache作为一级缓存,数据更新后发送异步消息(MQ等),其余localcache订阅异步消息,并根据消息来同步缓存.

3.localcache作为一级缓存,memcache中存放缓存变更的信息,定时任务定时获取memcache的信息,并决定是否更新localcache.

4.localcache作为一级缓存,每次从memcache中获取数据更改的标记位,如果标记发生变化,更新localcache

以上的这些实现方案,都在一定程度上加大了架构的复杂性,当localcache中数据出现脏数据时,排查问题及清理数据都会变得复杂.

他人经验之谈

1.sohu早期使用广播的方式(jgroup)同步localcache,结果经常会出现脏数据的问题,在后来的架构设计上干脆摒弃了localcache(即使使用,也不再作数据同步),全部使用memcache.

2.taobao在生产环境也很少使用localcache同步,对于非敏感性数据,只是通过简单的过期策略,来保证数据的一致性.

总结

集群环境下对于敏感性要求不高的数据可以使用localcache,只配置简单的失效机制来保证数据的一致性.

对敏感性高的数据直接使用集中式缓存,减低复杂度.

复杂方案看似完美的解决了问题,实际上性能和稳定性却很可能大打折扣.

感谢William 、放翁提出的宝贵建议。

redcreen

[转]localCache与集中式cache相关推荐

  1. HDFS集中式缓存管理(Centralized Cache Management)

    Hadoop从2.3.0版本号開始支持HDFS缓存机制,HDFS同意用户将一部分文件夹或文件缓存在HDFS其中.NameNode会通知拥有相应块的DataNodes将其缓存在DataNode的内存其中 ...

  2. Spring Boot 2.x基础教程:使用集中式缓存Redis

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 之前我们介绍了两种进程内缓存的用法,包括Spring B ...

  3. HDFS集中式的缓存管理原理与代码剖析--转载

    原文地址:http://yanbohappy.sinaapp.com/?p=468 Hadoop 2.3.0已经发布了,其中最大的亮点就是集中式的缓存管理(HDFS centralized cache ...

  4. postgresql 分区视图_PostgreSQL架构集中式到分布式主流架构总结

    文章目录 一.PG未来主流架构为什么是分布式二.PostgreSQL集中式到分布式架构总结 一.PG未来主流架构为什么是分布式 如果说5年前DB的分布式还只是一种趋势,如今分布式数据库正逐渐从趋势变成 ...

  5. Spring Boot中的缓存支持(二)使用Redis做集中式缓存

    上一篇介绍了在Spring Boot中如何引入缓存.缓存注解的使用.以及EhCache的整合. 虽然EhCache已经能够适用很多应用场景,但是由于EhCache是进程内的缓存框架,在集群模式下时,各 ...

  6. 你真的了解传统IT的集中式三层架构及主流开发技术选型?!

    [引言] 最近在看一本书<未来架构 从服务化到云原生>,关于技术架构这部分,结合书中内容,有一些认知和感悟. 互联网的技术架构正在经历由集中式->分布式->云平台的发展历程中. ...

  7. 集中式自动驾驶控制域中的高精地图数据解析算法

    作者 | Aimme 出品 | 焉知 下一代自动驾驶架构设计中已经倾向于以软件定义汽车的方式集合,主要涉及中央集中处理单元的方式会存在较大的改变.这一改变主要体现在外围传感单元将不再有单独的分布式处理 ...

  8. 探讨下如何更好的使用缓存 —— 集中式缓存Redis的BitMap存储、管道与事务、以及与本地缓存一起构建多级缓存

    大家好,又见面了. 通过前面的文章,我们一起剖析了Guava Cache.Caffeine.Ehcache等本地缓存框架的原理与使用场景,也一同领略了以Redis为代表的集中式缓存在分布式高并发场景下 ...

  9. 分布式,集中式,云原生存储技术

    分布式,集中式,云原生存储技术 分布式存储软件是真正的统一存储,实现同一套存储系统为上层应用提供块.文件和对象三种数据服务,满足业务对结构化和非结构化数据的存放需求,内置数据保护功能,例如:备份.容灾 ...

最新文章

  1. 计算机专业的第二批本科大学,我校22个专业入选第二批一流本科专业建设“双万计划”...
  2. FFMPEG more samples than frame size (avcodec_encode_audio2) 的解决方案
  3. python手机版ios-iOS 项目中如何使用 Python
  4. 没有会员wps合并多个sheet_WPS「合并文档」功能,如何“唰”一下把多个文档合并到一起?...
  5. ubuntu11.10安装arm-linux-gcc详解
  6. 加强版[BZOJ#3483] SGU505 Prefixes and suffixes(询问在线版)
  7. MySQL 服务无法启动--服务没有报告任何错误 ---Failed to find valid data directory.
  8. leetcode题库221-- 最大正方形
  9. android 控件高度和图片一样高,Android 根据图片宽高比例设置控件宽高
  10. java contenttype_SpringMVC Content-Type解析
  11. python win32库与subprocess_python subprocess 模块使用(以及详解管道阻塞的坑)
  12. Android Transition Framework详解---超炫的动画框架
  13. 在线JSON校验格式化工具(Be JSON)
  14. ccnp计算机英语,英语不好可以学习CCNA或是CCNP吗?
  15. 学习笔记:SSM框架项目搭建
  16. 域名备案方法及是否需要备案
  17. 经济学人 MAY 12TH–18TH 2018 page 32阅读————2020-02-25
  18. java多线程之Guarded Suspension模式
  19. 翻新iPad可以购买吗?有什么需要注意的地方
  20. 全国城市数据获取 mysql全国城市数据

热门文章

  1. 台式电脑怎么找不到计算机在哪,台式机没有蓝牙怎么办
  2. w7计算机的收藏夹里弄出桌面,Win7电脑桌面的便签怎么弄出来?
  3. sql in转换为join_同一个SQL语句,为啥性能差异咋就这么大呢?(1分钟系列)
  4. 360 php offer,审批终于通过了,从面试到拿到奇虎360的offer已经失…
  5. java中operationBox_Java使用PDFBox开发包实现对PDF文档内容编辑与保存
  6. mysql查看表描述_MySQL表记录操作介绍(重点介绍查询操作)
  7. Python 微信定向问好
  8. poj1006生理周期(中国剩余定理)
  9. 获取list泛型_泛型
  10. centos7恢复mysql数据库_MySQL数据库升级迁移填坑记