`

缓存学习整理(一)

阅读更多

 

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

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics