`

缓存学习整理(一)

 
阅读更多

 

1.缓存基本知识

     参考博客:http://carlosfu.iteye.com/blog/2241010

  

     1.1 基本概念

     1).什么是缓存(cache)?

    Cache(缓存): 从cpu的一级和二级缓存、Internet的DNS、到浏览器缓存都可以看做是一种缓存。

     维基百科: 写道

a store of things that will be required in the future, and can be retrieved rapidly.
(存贮数据(使用频繁的数据)的临时地方,因为取原始数据的代价太大了,所以我可以取得快一些)

     2). Cache hit(缓存命中)和Cahe miss(缓存未命中)

       

     3).缓存算法

      LRU(Least Recently Used) FIFO(First Input First Output)Least Frequently Used(LFU) 等等

 

      4).序列化

      serialization-and-deserialization(序列化与反序列化):可以参考:http://www.infoq.com/cn/articles/serialization-and-deserialization

    后面也有单独文章去分析。

   

 

     5).Scale Up (垂直扩容) 和 Scale out (水平扩容)

 

  驴拉车,通常不是把一头驴养壮(有极限),而通常是一群驴去拉(当然每个个体也不能太差)。 

 

 

 

服务器也是一样的道理,至少互联网是这样:

    6). Write-through 和 write-behind

 

1.2 缓存的种类

1). LocalCache(独立式-本地cache): 例如Ehcache、BigMemory Go

    (1) 缓存和应用在一个JVM中。

    (2) 缓存间是不通信的,独立的。

    (3) 弱一致性。

 

2. Standalone(单机)

(1) 缓存和应用是独立部署的。

(2) 缓存可以是单台。(例如memcache/redis单机等等)

(3) 强一致性

(4) 无高可用、无分布式。

 

3. Distributed(分布式):例如Redis-Cluster, memcache集群等等

(1) 缓存和应用是独立部署的。

(2) 多个实例。(例如memcache/redis等等)

(3) 强一致性或者最终一致性

(4) 支持Scale Out、高可用。

 

1.3 数据层访问速度:(作为开发人员要记住这些量级)

1.4  缓存相关问题

 

2. cache的应用

    2.1. ehcache,bigmemory使用

     详细参考专栏: http://www.iteye.com/blogs/subjects/bigmemory

     其中重点理解的点:

     1) ehcache架构图

  • ehcache-core:API,标准缓存引擎,RMI复制和Hibernate支持
  • ehcache:分布式Ehcache,包括Ehcache的核心和Terracotta的库
  • ehcache-monitor:企业级监控和管理
  • ehcache-web:为Java Servlet Container提供缓存、gzip压缩支持的filters
  • ehcache-jcache:JSR107 JCACHE的实现
  • ehcache-jgroupsreplication:使用JGroup的复制
  • ehcache-jmsreplication:使用JMS的复制
  • ehcache-openjpa:OpenJPA插件
  • ehcache-server:war内部署或者单独部署的RESTful cache server
  • ehcache-unlockedreadsview:允许Terracotta cache的无锁读
  • ehcache-debugger:记录RMI分布式调用事件
  • Ehcache for Ruby:Jruby and Rails支持

 

     2).Ehcache和bigmemeory关系

       Terracotta是一款由美国Terracotta公司开发的著名开源Java集群平台,Terracotta公司在2009年收购了著名的Java开源缓存项目Ehcache以及Java任务调度项目Quartz。经过对该项目的深度整合,Terracotta推出了易用性更高的分布式缓存 bigmemeory GO,bigmemory MAX 等等,官网:http://terracotta.org/

      

Get standalone in-memory data management on a single application server.


Leverage All the RAM on Your Machine without Garbage Collection Pauses

BigMemory Go lets you keep all application data instantly available in your server's ultra-fast machine memory. If you're still using only a few gigs of RAM for fear of garbage collection performance hits, then it’s time to add the power of BigMemory Go.


 

     

       3).Ehcache BigMemory: 摆脱GC困扰,参考下图:

       

       3.1)、MemStore(通常指堆内存储)

              (1) 堆内存储,受制于GC

              (2) 理论上最快,可以存储序列化和非序列化数据

              (3) 线程安全

              (4) 如果使用了OffHeapStore,那么MemStore保存The hottest subset of data from thre                                    OffHeapStore.

 

         3.2)、OffHeapStore(堆外内存:被称为BigMemory):

             有关堆外内存:可以参考如下文章:http://calvin1978.blogcn.com/articles/directbytebuffer.html

       只在企业版本的Ehcache(BigMemory)中提供,原理是利用nio的DirectByteBuffers实现,比存储到磁盘         上快,而且完全不受GC的影响,可以保证响应时间的稳定性;但是direct buffer的在分配上的开销要比          heap buffer大,而且要求必须以字节数组方式存储,因此对象必须在存储过程中进行序列化,读取则进        行反序列化操作,它的速度大约比堆内存储慢一个数量级。

      注:direct buffer不受GC影响,但是direct buffer归属的的JAVA对象是在堆上且能够被GC回收的,一旦         它被回收,JVM将释放direct buffer的堆外空间。)

           (1) 堆外内存,不受制于GC

           (2)  只在Bigmemory中能用,Ehcache不支持。

           (3) 堆外内存使用字节码存储,所以只能存储序列化数据

           (4) 速度极快 us级别,能扛着很高QPS

    4).bigmemory接入

    参考:http://carlosfu.iteye.com/blog/2237511

 

 

分享到:
评论

相关推荐

    ArcGIS Server地图缓存(map cache)案例学习

    ArcGIS Server 地图缓存(map cache)案例学习 本文是关于使用 ArcGIS Server 实现地图缓存(map cache)的案例学习,通过发布新西兰 1:50,000的地形图数据库,测试 ArcGIS Server 的 Cache 能力,并将服务作为底图...

    16.memcache&redis构建缓存服务器.学习笔记整理分享给需要的同学

    16.memcache&redis构建缓存服务器.学习笔记整理分享给需要的同学

    存储系统-缓存-磁盘学习

    缓存是一种基于时空局部性的优化策略,即在短时间内,如果某个数据被访问,那么接下来很可能还会再次访问到这个数据。缓存通过将频繁访问的数据存储在快速但容量有限的内存区域,减少了访问慢速存储(如硬盘)的次数...

    Hibernate学习笔记整理

    Hibernate学习笔记整理 以下是 Hibernate 框架的详细知识点: Hibernate 介绍 Hibernate 是一个 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到数据库表中。它提供了一个简洁的方式来访问和操作...

    缓存图片查看器

    "缓存图片查看器"是一款专门用于查看和提取网页中CSS隐藏图片的工具...总之,“缓存图片查看器”是一个实用的工具,能够帮助用户轻松获取和管理网页中的所有图片,无论是为了设计、开发还是学习,都能提供很大的便利。

    架构学习资料整理

    ### 架构学习资料整理 #### 核心知识点解析 ##### 架构师必备技能 架构师在IT项目中扮演着至关重要的角色,其职责不仅仅是设计系统架构,更需具备全面的技术视野和深刻的业务理解。架构师应具备以下特点: 1. **...

    hibernate框架学习笔记整理

    ### hibernate框架学习笔记整理 #### 一、Hibernate框架简介 **Hibernate框架**是一种用于Java应用的**对象关系映射**(Object-Relational Mapping, ORM)解决方案,它允许开发者使用面向对象的方式操作数据库中的表...

    软件考试系统架构设计师学习笔记(整理版)

    《软件考试系统架构设计师学习笔记(整理版)》是一份详尽的学习资料,主要针对的是软件考试中的系统架构设计师这一专业领域。这份笔记包含了自2008年以来的历年试题,是备考者全面掌握该考试内容的重要参考资料。...

    mybatis学习资料整理

    这份"mybatis学习资料整理"虽然不全面,但包含了MyBatis的一些核心概念和实践应用,还可能包含了他人博客的链接,可以作为学习MyBatis的初步指南。 1. **MyBatis简介**:MyBatis 是一个基于Java的持久层框架,它...

    java 学习方向 个人整理

    学习其基本配置,实体映射(包括一对一、一对多、多对多等关联关系),HQL查询,以及性能优化策略,如缓存和事务管理。 8. **Spring**:核心是IoC(控制反转)和DI(依赖注入)。理解Spring架构,掌握AOP(面向切面...

    Redis学习笔记整理

    ### Redis学习笔记整理 #### 一、Redis环境搭建 ##### 1.1 简介 Redis是一款开源的键值(Key-Value)型数据库系统,因其高性能和丰富的数据结构而广受欢迎。它不仅可以作为数据库使用,还可以作为一种数据结构服务器...

    《springcloud&学习资料》--设计精良的网上商城系统,包括前端、后端、数据库、负载均衡、数据库缓存、分库分表等.zip

    设计精良的网上商城系统,包括前端、后端、数据库、负载均衡、数据库缓存、分库分表、读写分离、全文检索、消息队列等,使用SpringCloud框架,基于Java开发。该项目可部署到服务器 个人花大量时间整理出的实战资料...

    浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)

    thinkPHP的F方法只能用于缓存简单数据类型,不支持有效期和缓存对象。S()缓存方法支持有效期,又称动态缓存方法。本文是小编日常整理有关thinkphp缓存方法,对thinkphp缓存方法感兴趣的朋友一起学习吧

    自己学习的设计模式整理的笔记源码

    7. **代理模式**:为其他对象提供一种代理以控制对这个对象的访问,可以实现远程代理、虚拟代理、缓存代理等。 8. **桥接模式**:将抽象部分与实现部分分离,使它们可以独立变化,降低了抽象和实现之间的耦合。 9....

    自己做的快播缓存文件合并工具

    用户可以查阅“使用说明”来了解如何操作这个工具,通过查看“源程序代码”学习和研究其工作原理,而“工程1.exe”是一个可执行文件,用户可以直接运行它来执行缓存文件的合并操作,无需进行编译或构建过程。...

    java学习整理文档.docx

    Java学习整理文档主要涵盖Spring框架、线程安全和Bean生命周期等多个关键知识点,这些内容对于面试和深入理解Java应用开发非常重要。 1. **Spring Bean的线程安全性**:Spring框架并没有保证单例Bean的线程安全,这...

    清除缓存等

    "清除缓存等"这一主题涵盖了对缓存、通话记录和短信记录的管理,旨在提供一个小型的演示项目,供学习者参考。 首先,我们要理解缓存的原理。缓存是一种存储技术,它能存储最近访问的数据以便快速重用。当应用程序...

    堆栈的学习整理 txt

    ### 堆栈的学习整理 #### 一、堆与栈的基本概念 - **堆(Heap)**:在程序运行过程中动态分配的内存区域,它的内存分配是不连续的,可以随机访问任何位置的数据。堆内存通常由操作系统管理,并且其大小可以根据...

Global site tag (gtag.js) - Google Analytics