Ehcache3.4 数据的持久化操作

  • 为什么要进行数据持久化操作
  • Ehcache数据持久化
    • 非配置文件持久化
    • 配置文件持久化
      • 添加ehcachexml配置文件
      • 添加测试代码

为什么要进行数据持久化操作

  我们知道,Ehcache中的数据是以键值对的形式存储在内存中的,由于内存比硬盘读写速度快很多,因而存放在内存中的信息其读取速度是很快的。但是它的缺点也很明显,那就是一旦程序退出,那么内存中的信息也就随之丢失,为了解决这一问题,因而我们要对其进行相应的持久化操作。

  为了进行持久化操作,我去官网上查看官方文档,无奈官方文档中没有相应的详细信息,而是一带而过,挖了一个大坑;而百度与谷歌的结果,得到的往往是过时的信息,因而也没有太大的参考价值。所以说因为这种事情我还折腾了半天,不过我发现最有参考价值的地方还是api文档,如下:

  • ehcache apidocs

Ehcache数据持久化

  Ehcache的数据持久化操作一共有两种方式,其一是采用非配置文件的方式;其二是采用配置文件的方式。

非配置文件持久化

  由于注释中已经写得很详细了,所以说我这里就简单的说一下,该程序所实现的持久化操作是将持久化数据存放到项目的target路径中,而该路径的获取有多种方式,其中this.getClass().getResource("/").getPath()等价于EhcacheAction2.class.getResource("/").getPath(),我们可以通过这种方式获取文件的相对输出路径,但是这需要指出的是,这里是用来进行测试的,所以说才会输出到target路径中,在实际开发时,是不应该输出到该路径下的。

@Test
    public void test2(){
        String path = this.getClass().getResource("/").getPath();
        log.info("----" + path );
        //对于磁盘层,数据存储在磁盘上。磁盘的速度越快、越专注,访问数据的速度就越快。
        //要获得一个PersistentCacheManager,其实就是一个普通的通常的CacheManager,但是具有销毁缓存的能力。
        PersistentCacheManager persistentCacheManager = CacheManagerBuilder.newCacheManagerBuilder()
                //EhcacheAction2.class.getResource("/").getPath()
                //F:\Test2\ehcache-parent\ehcache-demo2\target\classes\myData

                //System.getProperty("user.dir")
                //F:\Test2\ehcache-parent

                //提供一个存储数据的位置。
                .with(CacheManagerBuilder.persistence(new File(path, "myData")))
                .withCache("threeTieredCache",
                        CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class,
                        //为缓存使用的磁盘定义一个资源池。第三个参数是一个布尔值,用于设置磁盘池是否持久。
                        // 当设置为true时,池是持久的。当使用两个参数磁盘(long、MemoryUnit)的版本时,池就不会持久。
                        ResourcePoolsBuilder.newResourcePoolsBuilder()
                                //您为堆定义了一个资源池,该堆内只允许存放10个条目
                                .heap(10, EntryUnit.ENTRIES)
                                //您为非堆定义了一个资源池。仍然非常快,而且有点大。该大小为1M
                                /*.offheap(1, MemoryUnit.MB)*/
                                //您为磁盘定义一个持久的资源池。它是持久性的,因为它应该是(最后一个参数是正确的)。
                                .disk(10, MemoryUnit.MB, true))
                )
                .build(true);
        Cache threeTieredCache = persistentCacheManager.getCache("threeTieredCache&

你可能感兴趣的:(缓存,Ehcache3.4,数据持久化,缓存)