Guava Cache

一、概述

      Guava Cache是在内存中缓存数据,相比较与数据库或redis存储,访问内存中的数据会更加高效。合理的利用缓存可以极大的改善应用程序的性能。

二、应用场景

  1. 愿意消耗一些内存空间来提升速度。
  2. 预料到某些键会被多次查询。
  3. 缓存中存放的数据总量不会超出内存容量。

三、用法

  1. 添加依赖
    
       com.google.guava
       guava
       23.0
    

     

  2. 创建

         通过CacheBuilder构建一个缓存对象,CacheBuilder类采用builder设计模式,它的每个方法都返回CacheBuilder本身,直到builder方法被调用。

Cache cache = CacheBuilder.newBuilder().build();
cache.put("key","value");
System.out.println(cache.getIfPresent("key"));

     3.设置最大存储

          在构建缓存对象时,指定缓存最大存储数量。当Cache的数量达到最大值后再调用put方法向其中添加对象,Guava会从其删除一个一条,在存储新的Key。

       Cache cache = CacheBuilder
                            .newBuilder()
                            .maximumSize(5)
                            .build();
        cache.put("1", "1");
        cache.put("2", "2");
        cache.put("3", "3");
        cache.put("4", "4");
        cache.put("5", "5");
        cache.put("6", "6");

        System.out.println("key=1:"+cache.getIfPresent("1"));
        System.out.println("key=2:"+cache.getIfPresent("2"));
        System.out.println("key=3:"+cache.getIfPresent("3"));
        System.out.println("key=4:"+cache.getIfPresent("4"));
        System.out.println("key=5:"+cache.getIfPresent("5"));
        System.out.println("key=6:"+cache.getIfPresent("6"));


      结果:
        key=1:null
        key=2:2
        key=3:3
        key=4:4
        key=5:5
        key=6:6

经过多次测试,应该是按顺序删除。

         4.设置过期时间

                在构建Cache对象时,可以通过CacheBuilder类的expireAfterAccess和expireAfterWrite两个方法为缓存中的对象指定过期时间,过期的对象将会被缓存自动删除。

                expireAfterWrite表示写入后存在多长时间;

                expireAfterAccess表示多久没有被访问后过期。

        Cache cache = CacheBuilder
                .newBuilder()
                .maximumSize(5)
                .expireAfterWrite(1, TimeUnit.MINUTES) //缓存在一分钟后会过期
                .build();

 

你可能感兴趣的:(JAVA,java)