码迷,mamicode.com
首页 > 系统相关 > 详细

ehcache的三级缓存

时间:2019-08-01 17:23:26      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:main   tor   序列化   开发   int   nbu   多层   图片   enc   

开发架构中,经常把ehcache+redis两集缓存来做配合。。通常ehcache+redis+mysql 来作为三层存储架构,最后到数据库,然后db----->redis ---->ehcache 来供程序查询使用。。 而ehcache本身也支持3级缓存 “堆内内存、堆外内存、磁盘存储” 作为本地缓存框架, Ehcache支持多层缓存模式,常用的有三种数据存储介质:

1堆内
直接在JVM堆中存储JAVA对象,优点是速度快;缺点是会增加GC的频次和GC时间。

2堆外
在堆外内存中存储序列化的JAVA对象,优点是不会增加GC;缺点是存取速度较慢,需要额外的时间处理序列化和反序列化。

3 磁盘
缓存数据到磁盘,优点是掉电不会丢失数据,可用空间更大;缺点是存取速度比堆外慢很多。

技术图片

4三种结构一起使用,结构如上图。

5时序图

在Ehcache的多层缓存结构中,最底层被称为Authoritative Tier,其余的缓存层被称为Caching Tier。Authoritative Tier层数据是最全的,其余层的数据都是该层的数据子集,只是临时存储数据。

比如,堆内+堆外模式中,堆外为Authoritative Tier。堆内+堆外+磁盘模式中,磁盘为Authoritative Tier。

技术图片

技术图片

6 序列化

堆外和磁盘存储时,必须先将对象序列化为java.nio.ByteBuffer,Ehcache允许用户按下面的代码传入自定义的序列化类。

7 转一个demo

import java.io.File;
import org.ehcache.Cache;
import org.ehcache.PersistentCacheManager;
import org.ehcache.UserManagedCache;
import org.ehcache.config.builders.CacheConfigurationBuilder;
import org.ehcache.config.builders.CacheManagerBuilder;
import org.ehcache.config.builders.ResourcePoolsBuilder;
import org.ehcache.config.builders.UserManagedCacheBuilder;
import org.ehcache.config.units.EntryUnit;
import org.ehcache.config.units.MemoryUnit;

public class Main {

public static void main(String[] args) {

    PersistentCacheManager persistentCacheManager = CacheManagerBuilder.newCacheManagerBuilder()
    .with(CacheManagerBuilder.persistence(getStoragePath() + File.separator + "myData")) 
    .withCache("threeTieredCache",
        CacheConfigurationBuilder.newCacheConfigurationBuilder(Integer.class, String.class,
            ResourcePoolsBuilder.newResourcePoolsBuilder()
                .heap(10, EntryUnit.ENTRIES)  //堆
                .offheap(1, MemoryUnit.MB)    //堆外
                .disk(20, MemoryUnit.GB)      //磁盘
            )
    ).build(true);

    Cache<Integer, String> threeTieredCache = persistentCacheManager.getCache("threeTieredCache", Integer.class, String.class);

    //读
    for (int i=0;i<=20000;i++){
        threeTieredCache.put(i, "$"+i);
    }

    //写
    for (int i=0;i<=200000;i++){
        String value = threeTieredCache.get(i);
        System.out.println("get at "+i+":"+value);
    }

    persistentCacheManager.close();
}

private static String getStoragePath() {
    // TODO Auto-generated method stub
    return "d:";
}

}

ehcache的三级缓存

标签:main   tor   序列化   开发   int   nbu   多层   图片   enc   

原文地址:https://blog.51cto.com/chenhva/2425691

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!