guava cache 使用

5 篇文章 0 订阅
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() 代替
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值