使用google guava 实现定时缓存功能

http://blog.csdn.net/mach365/article/details/8103552

使用google guava 实现定时缓存功能。


创建Book.java

public class Book {
	private int id;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public Book(int id) {
		super();
		this.id = id;
	}
	public Book() {
		super();
	}
	@Override
	public String toString() {
		return ""+id;
	}
}

创建BookDao.java
public class BookDao {
	public Object executeSQL() {
		System.out.println("此处调用了Dao方法。executeSQL");
		List<Book> books = new ArrayList<Book>();
		for (int i = 0; i < 3; i++) {
			Book b = new Book(i);
			books.add(b);
		}


		return books;
	}
}

创建BookCache.java

public class BookCache {
	public static Cache<String, List<Book>> cache = CacheBuilder.newBuilder()
			.expireAfterAccess(8, TimeUnit.SECONDS).maximumSize(10)
			.build();
}

创建运行类。

public static void main(String[] args) {
	try {
		System.out.println("第一次调用dao方法,正确状态:应该调用Dao里的方法");
		List<Book> books = BookCache.cache.get("points",
				new Callable<List<Book>>() {
					@Override
					public List<Book> call() {
						BookDao dao = new BookDao();
						List<Book> list = (List<Book>) dao.executeSQL();
						if (null == list || list.size() <= 0) {
							list = new ArrayList<Book>();
						}
						return list;
					}
				});
		for (Book book : books) {
			System.out.println(book);
		}
		System.out.println("第二次调用dao方法,正确状态:不调用Dao里的方法");
		List<Book> books2 = BookCache.cache.get("points",
				new Callable<List<Book>>() {
					@Override
					public List<Book> call() {
						BookDao dao = new BookDao();
						List<Book> list = (List<Book>) dao.executeSQL();
						if (null == list || list.size() <= 0) {
							list = new ArrayList<Book>();
						}
						return list;
					}
				});
		for (Book book : books2) {
			System.out.println(book);
		}
	} catch (Exception e1) {
		e1.printStackTrace();
	}
	try {
		Thread.currentThread();
		Thread.sleep(TimeUnit.SECONDS.toMillis(10));
	} catch (InterruptedException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	try {
		System.out.println("休息十秒后,第三次调用dao方法,正确状态:调用Dao里的方法");
		List<Book> books = BookCache.cache.get("points",
				new Callable<List<Book>>() {
					@Override
					public List<Book> call() {
						BookDao dao = new BookDao();
						List<Book> list = (List<Book>) dao.executeSQL();
						if (null == list || list.size() <= 0) {
							list = new ArrayList<Book>();
						}
						return list;
					}
				});
		for (Book book : books) {
			System.out.println(book);
		}
		System.out.println("第四次调用dao方法,正确状态:不调用Dao里的方法");
		List<Book> books2 = BookCache.cache.get("points",
				new Callable<List<Book>>() {
					@Override
					public List<Book> call() {
						BookDao dao = new BookDao();
						List<Book> list = (List<Book>) dao.executeSQL();
						if (null == list || list.size() <= 0) {
							list = new ArrayList<Book>();
						}
						return list;
					}
				});
		for (Book book : books2) {
			System.out.println(book);
		}
	} catch (Exception e1) {
		e1.printStackTrace();
	}
}

运行结果:

第一次调用dao方法,正确状态:应该调用Dao里的方法
此处调用了Dao方法。executeSQL
0
1
2
第二次调用dao方法,正确状态:不调用Dao里的方法
0
1
2
休息十秒后,第三次调用dao方法,正确状态:调用Dao里的方法
此处调用了Dao方法。executeSQL
0
1
2
第四次调用dao方法,正确状态:不调用Dao里的方法
0
1
2


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值