1. 程式人生 > >第二十一篇:spring怎麼做快取

第二十一篇:spring怎麼做快取

 專案背景:
你可能遇情景:
1、一個做統計的頁面,每次重新整理需要調介面做查詢 ,是聯表查詢,查出來的資料還需要做一些計算或者加工,不算頁面上的圖表外掛,重新整理一次,延遲個幾秒鐘才出的來
2、 一個統計介面如此,一個頁面如果好幾個統計的介面查詢……
3、你有很多介面都要呼叫同一個方法,這個方法,正好又是耗時長的查詢統計……
總之,慢就一個字

快取可以解決,現在的快取都已經很高明瞭,Redis這樣的,以及資料庫這樣的不提,希望以後能遇到^-^
在此記錄下這段時間用的spring整合的ehcache
第一步:配置spring的cacheManager 圖片

 第二步:配置ehcache.xml
圖片

第三步:編寫EhcacheUtil工具類
/**
 * Ecache工具類
 */
public class EhcacheUtil {
   private static final String path = "/ehcache/ehcache.xml"; 
 private URL url; 
 private CacheManager manager; 
 private static EhcacheUtil ehCache; 

 private EhcacheUtil(String path) { 
     url = getClass().getResource(path); 
     manager = CacheManager.create(url); 
 } 
 //靜態工廠,第一次呼叫的時候例項化自己一遍
 public static EhcacheUtil getInstance() { 
     if (ehCache== null) { 
     ehCache= new EhcacheUtil(path); 
     }
     return ehCache; 
 } 

//存入名為cacheName的快取塊,鍵值對為key-value
 public void put(String cacheName, String key, Object value) { 
     Cache cache = get(cacheName); 
     Element element = new Element(key, value); 
     cache.put(element); 
 } 

//取出名為cacheName的快取
public Cache get(String cacheName) { 
    return  manager.getCache(cacheName);
 } 

 //取
 public Object get(String cacheName, String key) { 
    return   get(cacheName).get(key).getObjectValue(); 
 } 

//刪
public void remove(String cacheName, String key) { 
      get(cacheName).remove(key);
 }  } 

這樣你就可以手動控制你的快取了
通常spring的做法是使用註解@Cached,標註這個註解的方法的返回值會被加入快取,在下次呼叫的時候就可以直接從快取中取
但是這樣有個問題,這樣快取的資料需要某個機制不斷去清空快取,讓新的快取更新進來 
因此我使用一個定時任務,定時更新,尤其是統計型別的方法
所以下一篇,準備講spring的定時任務