guava cache 使用

google guava框架实现的缓存可以很方便的对需要的缓存对象设置生命周期,及缓存对象的弱引用 强应用 软引用等
 
	public static void main(String[] args) throws InterruptedException {
		Cache<String, Book> cahce=CacheBuilder.newBuilder().expireAfterAccess(8, TimeUnit.SECONDS).maximumSize(10).build(new CacheLoader<String, Book>() {
			@Override
			public Book load(String key) throws Exception {
				Book b=new Book();
				return b;
			}
		});
		Book b=cahce.apply("q");
		System.out.println(b);
		Book b2=cahce.apply("q");
		System.out.println(b2);
		Thread.currentThread();
		Thread.sleep(TimeUnit.SECONDS.toMillis(10));
		Book b3=cahce.apply("q");
		System.out.println(b3);
	}
 
输出:
org.zero.resource.Book@be2358
org.zero.resource.Book@be2358
org.zero.resource.Book@32fb4f
 
可见对象book对象的缓存在8秒后被移除.
 
 
下面来看 maximumSize(1) 的作用,是指最大缓存对象的数目
 
	public static void main(String[] args) throws InterruptedException {
		CacheBuilder<String, Book> cahceBuilder=CacheBuilder.newBuilder().expireAfterAccess(8, TimeUnit.SECONDS).maximumSize(1).removalListener(new RemovalListener<String, Book>() {
			@Override
			public void onRemoval(RemovalNotification<String, Book> rn) {
				System.out.println(rn.getKey()+"被移除");
			}
		
		});
		Cache<String, Book> cahce=cahceBuilder.build(new CacheLoader<String, Book>() {
			@Override
			public Book load(String key) throws Exception {
				Book b=new Book();
				return b;
			}
		});
		Book book_1_0=cahce.apply("book_1");//缓存book_1对象
		System.out.println(book_1_0);
		Book book_2_0=cahce.apply("book_2");//因为maximumSize设为1,故不能同时缓存两个或两个以上的对象,所以必须先移除之前的缓存对象book_1 再缓存book_2对象
		System.out.println(book_2_0);
		Book book_1_1=cahce.apply("book_1");//获取book_1 对象,如果存在则返回,否则创建新的对象,并将之缓存(book_2会被移除).
		System.out.println(book_1_1);


		Book book_2_1=cahce.apply("book_2");
		System.out.println(book_2_1);//org.zero.resource.Book@133f1d7
		Book book_2_1_=cahce.apply("book_2");
		System.out.println(book_2_1_);//org.zero.resource.Book@133f1d7
		
	}
 
输出:
 
org.zero.resource.Book@1ed2ae8
book_1被移除
org.zero.resource.Book@32fb4f
book_2被移除
org.zero.resource.Book@1113708
book_1被移除
org.zero.resource.Book@133f1d7
org.zero.resource.Book@133f1d7
 
maximumSize设置为2或更大值时,输出:
org.zero.resource.Book@1ed2ae8
org.zero.resource.Book@19c26f5
org.zero.resource.Book@1ed2ae8
org.zero.resource.Book@19c26f5
org.zero.resource.Book@19c26f5
可见,并未移除任何对象
=============================guava15 版后,有所改动============================
在新版本中(有可能在15之前就已经改变了),Cache 新增了子接口LoadingCache,和子类LocalManualCache ,子抽象类ForwardingCache 等. Cache使用接口有所改变,但是不大.
Cache接口中移除了apply 等方法, 在LoadingCache 中以get()或者getUnchecked() 代替
 
 

你可能感兴趣的:(cache)