[转]localCache与集中式cache

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

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

localcachememcache性能比较

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

Cache

请求方式

次数

时间

平均

Localcache

hashmapget请求

1亿

1344ms

0.00001344ms

Memcache

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

1

4437ms

0.4437ms

Db

单表查询(有索引)

  

1-2ms

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

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

使用localcache会带来哪些问题

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

有很多框架在这上面做了很多工作,比如ehcache ,主要是通过cache复制(copyinvalidate)来解决,大概的思路是使用消息多播机制,当一个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

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

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

相关文章

上机环境是什么意思_380元入手RX580满血显卡,跑分17万,还要什么自行车

今年显卡的行情都要比去年上涨一些,特别是刚过完年那一段时间,价格上涨的尤其的快,一张显卡上涨几十块,当时也是不敢入手 ,等到了现在行情总算要好一些了,价格也适当的在往下走,最后入手了一款性…

docker-conpose 入门

docker-compose 安装 官方地址github Linux 下安装 sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose要安装其他版本的 Compose,请替换 1.29.1 …

史上最全 yum 入门使用教程和常见错误解决办法

介绍 众所周知,Redhat和Fedora的软件安装命令是rpm。需要手动寻找安装该软件所需要的一系列依赖关系,yum的诞生很好解决了以上的问题,下面有几个实用的yum小技巧和大家分享。 rpm与yum常用命令集合 $ rpm -qa | grep jenkins …

【首创】完美解决scrollview与menu的兼容问题

经过一段时间的学习,才发现CH5里scrollview的例子很少,也没有相关的SAMPLE,于是乎,开始投入研究。大多数scrollview的例子只有在cocos2d-x里才用到,那么CH5里要用到滚动条怎么理呢?有人说用tableview&#…

lru调度算法例题_嵌入式必会!C语言最常用的贪心算法就这么被攻略了

01基本概念贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,只做出在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的…

Oracle数据库版本维护支持结束时间表以及数据库版本发行时间表

Oracle数据库版本支持结束时间表以及数据库版本发行时间表 数据库版本支持时间表: 大版本(点击查看详情)当前补丁集下一补丁集标准服务结束日期扩展服务结束日期注释12.1.0.X无12.1.0.2––基版本为 12.1.0.1。11.2.0.X11.2.0.4无2015年1月2…

【虚拟化实战】存储设计之一存储类型

Problem Statement存储设计是虚拟化设计的重要部分之一,确定合适的存储类型是展开存储设计的关键一步。FC/FCoE, iSCSI, NFS 甚至 Local Storage, 你会选择哪一种呢?参见下图。Requirements客户需要移植物理服务器到VMware虚拟化平台,很多物…

ztree 指定节点清空_节点操作

一.节点操作​ 1.DOM节点操作​ ①创建节点​ 语法:document.createElement("标签名");​ 注:只单纯的创建出来了一个元素节点对象,不包含内容、属性和样式。​ ②插入节点​ 在父元素内部末尾追加​ 语法:父…

GC 基础

如何定位垃圾 1. 引用计数法 为对象添加一个引用计数器,当对象增加一个引用时计数器加 1,引用失效时计数器减 1。引用计数为 0 的对象可被回收。 在两个对象出现循环引用的情况下,此时引用计数器永远不为 0,导致无法对它们进行…

离线部署 CDH 6.2 及使用 CDH 部署 Hadoop3 大数据平台集群服务

Cloudera Manager Cloudera Manager 分为两个部分:CDH和CM。 CDH是Cloudera Distribution Hadoop的简称,顾名思义,就是cloudera公司发布的Hadoop版本,封装了Apache Hadoop,提供Hadoop所有的服务,包括HDFS…

resize属性,使textarea在ff(火狐)中禁止拉伸

HTML 标签 textarea 在大部分浏览器中只要指定行(rows)和列(cols)属性,就可以规定 textarea 的尺寸,大小就不会改变,不过更好的办法是使用 CSS 的 height 和 width 属性,但是Chrome,Safari和Fir…

多线程分段下载文件

原理 先获取文件大小,然后分段分配任务给线程下载 在开始多线程下载前得先得知下载文件的大小,如果在之前的流程中并没有告知文件大小则可以使用HTTP请求方法 HEAD,这个请求方法类似于 GET 请求,只不过返回的响应中没有具体的内…

玛酷机器人课程视频_建阳玛酷机器人丨2019WRO机器人比赛凯旋而归!

2019年7月福州WRO青少年机器人交流RA 7月27-28日,经过角逐, WRO华南赛区(福州站)在福州中加学校顺利落幕。 本次大赛设置了山火营救、无人速递、城市救援、RA常规赛、足球世界杯、WEDO常规项目、WEDO小手拼出大世界等七个单项比赛。 …

kindeditor图片批量上传失败问题

2019独角兽企业重金招聘Python工程师标准>>> 问题:在演示版中批量上传没有问题,放到我们后台系统中,就上传不成功。 排查:逐步验证发现根本没有http到upload上传文件中,往上找。。。终于碰到是后台管理员验…

presto集群安装

presto集群安装 整合hive 张映 发表于 2019-11-07 分类目录: hadoop/spark/scala 标签:hive, presto Presto是一个运行在多台服务器上的分布式系统。 完整安装包括一个coordinator(调度节点)和多个worker。 由客户端提交查询&…

wps 复制流程图_简单三步,用WPS轻松完成一个又大气又好看的流程图!

流程图是工作中经常需要用到的图形,使用 WPS 可以方便地创建流程图。创建的流程图保存在云文档后,可以随时插入 WPS 的其他组件。新建流程图文件流程图可以从 WPS 的其他组件中创建,如 WPS 文字、WPS 表格等,也可以单独创建。流程…

CAS实现原子操作的三大问题

在Java中可以通过锁和CAS的方式实现原子操作。 CAS实现原子操作的三大问题 1.ABA问题 CAS需要在操作值的时候,检测值有没有发生变化,如果没有发生变化则更新。 但是如果一个值原来是A,变成B,又变成A,那么使用CAS进行…

Tez 0.9安装部署+hive on tez配置 + Tez-UI

Tez说明 将xyz替换为您正在使用的tez发行版号。例如0.5.0。对于Tez版本0.8.3和更高版本,Tez需要Apache Hadoop版本为2.6.0或更高版本。对于Tez版本0.9.0及更高版本,Tez需要Apache Hadoop版本为2.7.0或更高版本。 关于版本 1.Hadoop 2.7.0(我…

iphone 字体

今天在网上找了下,iphone的UITextView字体类型的设置。现总结如下,如有误,欢迎指正。 [textView setFont:[UIFont fontWithName:"TrebuchetMS-Italic" size:18]];但是字体的类型名不好找,总结下有这么些类型&#xff1a…

启动成功浏览器显示不了_移动端利用chrome浏览器在PC端进行调试方法

由于最近工作中遇到需要在电脑上调试手机端的功能和样式,之前也没有遇到过,所以就各种百度和试验。最后终于功夫不负有心人,成功了。(那一刻心情真滴很鸡冻啊~~~~~~~~~)。所以暂时记录下来。以免鸡冻过度再给忘记了。好,接下来就是…