Guava是一種基於開源的Java庫,其中包含谷歌正在由他們不少項目使用的不少核心庫。這個庫是爲了方便編碼,並減小編碼錯誤。這個庫提供用於集合,緩存,支持原語,併發性,常見註解,字符串處理,I/O和驗證的實用方法。redis
一、標準化 - Guava庫是由谷歌託管。spring
二、高效 - 可靠,快速和有效的擴展JAVA標準庫緩存
三、優化 -Guava庫通過高度的優化安全
guava能夠設置key值大小,初始、最終容量,有LRU機制,滿了以後根據LRU策略淘汰非熱點數據網絡
本地熱點緩存,有這麼幾個特色:session
熱點數據,髒讀特別不敏感,內存必須可控等併發
本地緩存和redis緩存相比有何優勢?快!能夠節省網絡傳輸的時間開銷app
<!--這個是補充的,redis也能夠使用redisTemplate-->ide
<dependency>優化
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>2.0.5.RELEASE</version>
</dependency>
<!--這個是guava的包-->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
//封裝本地緩存操做類
public interface CacheService {
//存方法
void setCommonCache(String key,Object value);
//取方法
Object getFromCommonCache(String key);
}
@Service
public class CacheServiceImpl implements CacheService {
private Cache<String,Object> commonCache = null;
@PostConstruct
public void init(){
commonCache = CacheBuilder.newBuilder()
//設置緩存容器的初始容量爲10
.initialCapacity(10)
//設置緩存中最大能夠存儲100個KEY,超過100個以後會按照LRU的策略移除緩存項
.maximumSize(100)
//設置寫緩存後多少秒過時
.expireAfterWrite(60, TimeUnit.SECONDS).build();
}
@Override
public void setCommonCache(String key, Object value) {
commonCache.put(key,value);
}
@Override
public Object getFromCommonCache(String key) {
return commonCache.getIfPresent(key);
}
}
@RequestMapping(value = "/get",method = {RequestMethod.GET})
@ResponseBody
public CommonReturnType getItem(@RequestParam(name = "id")Integer id){
ItemModel itemModel = null;
//先取本地緩存
itemModel = (ItemModel) cacheService.getFromCommonCache("item_"+id);
if(itemModel == null){
//根據商品的id到redis內獲取
itemModel = (ItemModel) redisTemplate.opsForValue().get("item_"+id);
//若redis內不存在對應的itemModel,則訪問下游service
if(itemModel == null){
itemModel = itemService.getItemById(id);
//設置itemModel到redis內
redisTemplate.opsForValue().set("item_"+id,itemModel);
redisTemplate.expire("item_"+id,10, TimeUnit.MINUTES);
}
//填充本地緩存
cacheService.setCommonCache("item_"+id,itemModel);
}
ItemVO itemVO = convertVOFromModel(itemModel);
return CommonReturnType.create(itemVO);
}