读书人

guava cache 运用

发布时间: 2012-07-01 13:15:00 作者: rapoo

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>() {@Overridepublic 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@be2358org.zero.resource.Book@be2358org.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>() {@Overridepublic void onRemoval(RemovalNotification<String, Book> rn) {System.out.println(rn.getKey()+"被移除");}});Cache<String, Book> cahce=cahceBuilder.build(new CacheLoader<String, Book>() {@Overridepublic 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@133f1d7Book book_2_1_=cahce.apply("book_2");System.out.println(book_2_1_);//org.zero.resource.Book@133f1d7}
?输出:
org.zero.resource.Book@1ed2ae8book_1被移除org.zero.resource.Book@32fb4fbook_2被移除org.zero.resource.Book@1113708book_1被移除org.zero.resource.Book@133f1d7org.zero.resource.Book@133f1d7
当maximumSize设置为2或更大值时,输出:org.zero.resource.Book@1ed2ae8org.zero.resource.Book@19c26f5org.zero.resource.Book@1ed2ae8org.zero.resource.Book@19c26f5org.zero.resource.Book@19c26f5可见,并未移除任何对象


读书人网 >开源软件

热点推荐