`

cache

阅读更多

根据缓存和应用的耦合程度将其划分为local cache和remote cache 

Local cache是指包含在应用之中的缓存组件.而remote cache指和应用解耦在应用之外的缓存组件.典型的local cache有ehcache,oscache,而remote cache有大名鼎鼎的memcached. 

Localcache最大的优点是应用和cache的时候是在同一个进程内部,请求缓存非常快速,完全不需要网络开销等.所以单应用,不需要集群或者集群情况下cache node不需要相互通知的情况下使用local cache比较合适.这也是java中ehcache和oscache这么流行的原因. 

但是Local cache是有一定的缺点的,一般这种缓存框架(比如java中的ehcache或者oscache)都是local cache.也就是跟着应用程序走的,多个应用程序无法直接共享缓存,应用集群的情况下这个问题更加明显,当然也有的缓存组件提供了集群节点相互通知缓存更新的功能,但是由于这个是广播,或者是环路更新,在缓存更新频繁的情况下会导致网络io开销非常大,严重的时候会影响应用的正常运行.而且如果缓存中数据量较大得情况下使用localcache意味着每个应用都有一份这么大得缓存,着绝对是对内存的浪费. 

Memcached 介绍 

Memcached是一种集中式Cache支持分布式横向扩展。这里需要有点说明,很多开发者觉得Memcached是一种分布式Cache,但是其实Memcached服务端本身是单实例的,只是在客户端实现过程中可以根据存储的主键作分区存储,而这个区就是Memcached服务端的一个或者多个实例,如果将客户端也囊括到Memcached中,那么可以部分概念上说是集中式的。其实回顾一下集中式的构架,无非两种情况:1.节点均衡的网状(JBoss Tree Cache),利用JGroup的多播通信机制来同步数据。2.Master-Slaves模式(分布式文件系统),由Master来管理Slave,如何选择Slave,如何迁移数据,都是由Master来完成,但是Master本身也存在单点问题。 
总结几个它的特点来理解一下它的优点和限制。 

Memory:内存存储,不言而喻,速度快,对于内存的要求高,不指出的话所缓存的内容非持久化。对于CPU要求很低,所以常常采用将Memcached服务端和一些CPU高消耗Memory低消耗应用部属在一起。(作为我们AEP正好有这样的环境,我们的接口服务器有多台,接口服务器对于CPU要求很高(由于WS-Security),但是对于Memory要求很低,因此可以用作Memcached的服务端部属机器) 

集中式Cache:避开了分布式Cache的传播问题,但是需要非单点保证其可靠性,这个就是后面集成中所作的cluster的工作,可以将多个Memcached作为一个虚拟的cluster,同时对于cluster的读写和普通的memcached的读写性能没有差别。 

分布式扩展:Memcached的很突出一个优点,就是采用了可分布式扩展的模式。可以将部属在一台机器上的多个Memcached服务端或者部署在多个机器上的Memcached服务端组成一个虚拟的服务端,对于调用者来说完全屏蔽和透明。提高的单机器的内存利用率,也提供了scale out的方式。 

Socket通信:传输内容的大小以及序列化的问题需要注意,虽然Memcached通常会被放置到内网作为Cache,Socket传输速率应该比较高(当前支持Tcp和udp两种模式,同时根据客户端的不同可以选择使用nio的同步或者异步调用方式),但是序列化成本和带宽成本还是需要注意。这里也提一下序列化,对于对象序列化的性能往往让大家头痛,但是如果对于同一类的Class对象序列化传输,第一次序列化时间比较长,后续就会优化,其实也就是说序列化最大的消耗不是对象序列化,而是类的序列化。如果穿过去的只是字符串,那么是最好的,省去了序列化的操作,因此在Memcached中保存的往往是较小的内容。 
特殊的内存分配机制:首先要说明的是Memcached支持最大的存储对象为1M。它的内存分配比较特殊,但是这样的分配方式其实也是对于性能考虑的,简单的分配机制可以更容易回收再分配,节省对于CPU的使用。这里用一个酒窖比喻来说明这种内存分配机制,首先在Memcached起来的时候可以通过参数设置使用的总共的Memory,这个就是建造一个酒窖,然后在有酒进入的时候,首先申请(通常是1M)的空间,用来建酒架,酒架根据这个酒瓶的大小分割酒架为多个小格子安放酒瓶,将同样大小范围内的酒瓶都放置在一类酒架上面。例如20cm半径的酒瓶放置在可以容纳20-25cm的酒架A上,30cm半径的酒瓶就放置在容纳25-30cm的酒架B上。回收机制也很简单,首先新酒入库,看看酒架是否有可以回收的地方,如果有直接使用,如果没有申请新的地方,如果申请不到,采用配置的过期策略。这个特点来看,如果要放的内容大小十分离散,同时大小比例相差梯度很明显,那么可能对于使用空间来说不好,可能在酒架A上就放了一瓶酒,但占用掉了一个酒架的位置。 

Cache机制简单:有时候很多开源的项目做的面面俱到,但是最后也就是因为过于注重一些非必要性的功能而拖累了性能,这里要提到的就是Memcached的简单性。首先它没有什么同步,消息分发,两阶段提交等等,它就是一个很简单的Cache,把东西放进去,然后可以取出来,如果发现所提供的Key没有命中,那么就很直白的告诉你,你这个key没有任何对应的东西在缓存里,去数据库或者其他地方取,当你在外部数据源取到的时候,可以直接将内容置入到Cache中,这样下次就可以命中了。这里会提到怎么去同步这些数据,两种方式,一种就是在你修改了以后立刻更新Cache内容,这样就会即时生效。另一种是说容许有失效时间,到了失效时间,自然就会将内容删除,此时再去去的时候就会命中不了,然后再次将内容置入Cache,用来更新内容。后者用在一些时时性要求不高,写入不频繁的情况。 
客户端的重要性:Memcached是用C写的一个服务端,客户端没有规定,反正是Socket传输,只要语言支持Socket通信,通过Command的简单协议就可以通信,但是客户端设计的合理十分重要,同时也给使用者提供了很大的空间去扩展和设计客户端来满足各种场景的需要,包括容错,权重,效率,特殊的功能性需求,嵌入框架等等。 

几个应用点:小对象的缓存(用户的token,权限信息,资源信息)。小的静态资源缓存。Sql结果的缓存(这部分用的好,性能提高相当大,同时由于Memcached自身提供scale out,那么对于db scale out的老大难问题无疑是一剂好药)。ESB消息缓存。

分享到:
评论

相关推荐

    cache性能分析实验

    ### Cache性能分析实验知识点 #### 实验背景与目标 本实验旨在通过使用SimpleScalar模拟器对Cache性能进行深入分析,以此来加深对Cache基础知识、结构及其工作原理的理解。此外,还将探讨并量化Cache的主要参数...

    springboot整合jetcache完整代码

    JetCache是阿里巴巴开源的一款高性能、轻量级的分布式缓存框架,适用于微服务架构中的缓存场景。本文将详细介绍如何在SpringBoot项目中整合JetCache,并探讨其本地缓存和Redis缓存的使用,以及如何实现多缓存的并行...

    PrimoCache重置工具

    《PrimoCache重置工具详解及应用》 PrimoCache是一款高效、实用的硬盘缓存软件,它通过在系统内存中创建虚拟缓存,显著提升硬盘读写性能,从而优化系统运行速度。然而,如同大多数试用软件一样,PrimoCache在一定...

    java连接cache数据库说明,数据库驱动,cache可视化工具

    Java连接Cache数据库主要涉及到的是如何使用Java编程语言与Intersystems Cache数据库进行交互。Intersystems Cache是一款高性能、面向对象的数据库系统,广泛应用于医疗、金融等领域的复杂数据管理。在Java环境中,...

    cache性能分析实验报告.docx

    【Cache性能分析实验报告】 本实验旨在深入理解Cache的基本概念、结构和工作原理,通过实际操作分析Cache的容量、相联度和块大小对性能的影响,以及不同替换算法的效果。实验采用Vmware虚拟机上的Redhat 9.0 Linux...

    高速缓存(Cache)的Verilog代码

    该工程包含数据缓存D_Cache和指令缓存I_Cache的Verilog代码和仿真文件,Cache的详细技术参数包含在.v文件的注释中。 直接相连16KB D_Cache Cache写策略: 写回法+写分配 (二路)组相连16KB I_Cache Cache替换策略: ...

    分块矩阵优化cache

    ### 分块矩阵优化Cache:深度解析与应用策略 #### 核心知识点概览: 1. **Cache基础原理**:理解高速缓存(Cache)在现代计算机系统中的关键作用及其内部结构,包括标记存储器和数据存储器的功能。 2. **Cache失效...

    Cache的工作原理

    ### Cache的工作原理详解 #### 一、引言 在现代计算机体系结构中,为了提高处理器访问数据的速度,引入了多种缓存技术。其中,Cache作为连接CPU与主存的重要环节,其工作原理对于理解计算机系统性能至关重要。本文...

    Oracle Buffer和Cache的区别

    Oracle数据库中的Buffer Cache和一般的Cache概念虽然相似,但它们在具体应用中有着不同的侧重点。首先,我们需要理解Buffer Cache的基本概念。在Oracle数据库系统中,Buffer Cache是内存结构的一部分,它存储了最近...

    计算机体系结构cache实验报告

    在本“计算机体系结构cache实验报告”中,我们主要探讨了Cache存储过程的模拟和性能分析,重点关注了不同因素如关联方式、Cache容量、关联度和块大小对Cache性能的影响。实验采用控制变量法,通过操作系统试验中的...

    PrimoCache v3.09.zip

    《PrimoCache v3.09:硬盘缓存利器的深度解析》 PrimoCache,一个在IT领域中被广泛使用的高效硬盘缓存工具,其最新版本v3.09,为用户带来了更为优化的存储性能提升。这款软件的核心功能在于通过在内存中创建临时...

    cache-api-1.1.1-API文档-中文版.zip

    赠送jar包:cache-api-1.1.1.jar; 赠送原API文档:cache-api-1.1.1-javadoc.jar; 赠送源代码:cache-api-1.1.1-sources.jar; 赠送Maven依赖信息文件:cache-api-1.1.1.pom; 包含翻译后的API文档:cache-api-...

    cache_axi4.rar

    在计算机系统中,Cache是一种高速数据存储部件,用于暂时存储CPU频繁访问的内存数据,以减少主内存与CPU之间的数据传输延迟,提高系统的整体性能。本文将深入探讨基于AXI4(Advanced eXtensible Interface)总线协议...

    logisim及全相联cache设计.rar

    全相联Cache( Fully-Associative Cache)是Cache组织方式的一种,与直接映射Cache和组相联Cache不同,它的每一个块都可以映射到Cache的任何一个位置上,这提供了更大的灵活性,但也带来了更高的复杂性。 全相联...

    jdbc连接cache的demo及jar包,自己备份.rar

    标题"jdbc连接cache的demo及jar包,自己备份.rar"指出这是一个关于使用JDBC(Java Database Connectivity)连接Cache数据库的示例项目,其中包含了必要的jar包,并且用户已经将其作为个人备份保存。这里的“Cache”...

    Guava-Cache本地缓存案例代码

    Guava Cache是Google Guava库中的一个强大特性,它提供了高效的本地缓存解决方案,用于存储经常访问的数据,以减少对远程服务或计算的调用,从而提高应用性能。本案例代码将详细介绍Guava Cache的使用,包括缓存的...

    nginx_cache_purge.zip

    《Nginx Cache Purge:高效管理Web缓存的利器》 在当今互联网环境中,Web服务器的性能优化至关重要,而缓存技术则是其中的关键一环。Nginx,以其高性能、稳定性以及模块化的特性,成为了许多网站首选的反向代理和...

    Linux驱动中的DMA和Cache一致性问题

    然而,DMA和Cache之间存在一致性问题,特别是在某些嵌入式平台上,DMA操作可能会绕过Cache,导致数据不一致,这就需要通过一系列策略来确保Cache一致性。 在DMA机制中,有两类主要的Cache一致性问题:流式DMA...

    实验3 直接相联Cache设计1

    计算机组成原理实验指导书中的“实验3 直接相联Cache设计”着重讲解了Cache的基础知识,特别是直接相联Cache的结构、设计方法以及其实现。以下是对实验内容的详细阐述: 1. **直接相联Cache的基本结构**: - **...

    PrimoCache v3.09

    《PrimoCache v3.09:提升硬盘性能的秘密武器》 在当今的计算机领域,存储设备的速度对系统整体性能有着显著的影响。尤其对于那些依赖大量数据读取的应用程序,如游戏、视频编辑软件和数据库服务,硬盘的读取速度至...

Global site tag (gtag.js) - Google Analytics