1. 程式人生 > >Java本地緩存解決方案其一(使用Google的CacheBuilder)

Java本地緩存解決方案其一(使用Google的CacheBuilder)

import 緩存 tar google 相對 for use 控制臺 star

前不久,業務實現上需要用到本地緩存來解決一些數據量相對較小但是頻繁訪問的數據,通過查找各種資料,找到了一種可以實現的方案——采用的是Google的CacheBuilder。下面是代碼實現過程:
1.首先在maven中引入下面的包;
  1. <dependency>
  2. <groupId>com.google.guava</groupId>
  3. <artifactId>guava</artifactId>
  4. <version>19.0</version>
  5. </dependency>
2.下面這段是緩存代碼,用到了匿名內部類的方式;

package com.jd.common.util;
import java.util.concurrent.TimeUnit;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;

public class AndyService

{
private final LoadingCache<String, String> cache;

public AndyService()

{
/**
* 5秒自動過期
*/
cache = CacheBuilder.newBuilder().expireAfterWrite(5, TimeUnit.SECONDS).build(new CacheLoader<String, String>() {
public String load(String id) throws Exception
{
System.out.println("method inovke");
//這裏執行查詢數據庫,等其他復雜的邏輯

return "User:" + id;
}
});
}

public String getAndyName(String id) throws Exception
{
return cache.get(id);
}
}
3.下面是測試用例
class GuavaCacheTest
{
public static void main(String[] args)throws Exception
{
AndyService us = new AndyService();
for(int i=0;i<20;i++)
{
System.out.println(us.getAndyName("1001"));
TimeUnit.SECONDS.sleep(1);
}
}
}
4.下面的是控制臺中代碼輸入內容:

method inovke
User:1001
User:1001
User:1001

method inovke
User:1001
User:1001
User:1001

method inovke
User:1001
User:1001
User:1001

method inovke
User:1001
User:1001
User:1001


關於為什麽使用本地緩存而不使用別的方式的原因,詳見前輩的總結:
http://www.cnblogs.com/fengli9998/p/7875027.html

Java本地緩存解決方案其一(使用Google的CacheBuilder)