真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

阿里P7架構(gòu)師分享:15分鐘快速掌握SpringCache(使用詳解)

緩存的策略有很多,在應(yīng)用系統(tǒng)中可根據(jù)情況 選擇,通常會(huì)把一些 靜態(tài)數(shù)據(jù)后者變化頻率不高的數(shù)據(jù)放到緩存中,如配置參數(shù)、字典表等。而有些場(chǎng)景可能要尋找替代方案,比如,想提升全文檢索的速度,在復(fù)雜場(chǎng)景下建議使用搜索引擎,如Solr或 ElasticSearch。

創(chuàng)新互聯(lián)專注于企業(yè)全網(wǎng)營(yíng)銷推廣、網(wǎng)站重做改版、藍(lán)田網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5開發(fā)、成都做商城網(wǎng)站、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為藍(lán)田等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

通常在Web開發(fā)中,不同層級(jí)對(duì)應(yīng)的緩存要求和緩存策略全然不同,如下圖:
阿里P7架構(gòu)師分享:15分鐘快速掌握SpringCache(使用詳解)
下面了解一下緩存中的兩個(gè)比較重要的基本概念:

1. 緩存命中率

即從緩存中讀取數(shù)據(jù)的次數(shù)與總讀取次數(shù)的比率。一般來說,命中率越高越好。

命中率 = 從緩存中讀取的次數(shù) /(總讀取次數(shù)【從緩存中讀取的次數(shù) + 從慢速設(shè)備上讀取的次數(shù)】)

Miss 率 = 沒有從緩存中讀取的次數(shù) /(總讀取次數(shù)[從緩存中讀取的次數(shù) + 從慢速設(shè)備上讀取的次數(shù)])

如果要做緩存,就一定要監(jiān)控這個(gè)指標(biāo),來看緩存是否工作良好。

2.過期策略

  • FIFO(First In First Out):先進(jìn)先出策略。
  • LRU(Least Recently Used): 最久未使用策略,即一定時(shí)間段內(nèi)使用率最少的那個(gè)數(shù)據(jù)被溢出。
  • TTL(Time to Live): 存活期,即從緩存中創(chuàng)建時(shí)間點(diǎn)開始直至到期的一個(gè)時(shí)間段。
  • TTI(Time To Idle): 空閑期,即一個(gè) 數(shù)據(jù)多久沒被訪問就從緩存中移除的時(shí)間。
    自定義實(shí)現(xiàn)一個(gè)緩存管理器:

首先自定義一個(gè)User實(shí)體類。

public class User implements Serializable {
    private String userId;
    private String userName;
    private int age;

    public User(String userId) {
        this.userId = userId;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

}

接下來定義一個(gè)緩存管理器:

public class CacheManager {
    private Map cache = new ConcurrentHashMap();

    public T getValue(Object key) {
        return cache.get(key);
    }

    public void addOrUpdate(String key, T value) {
        cache.put(key, value);
    }

    public void delCache(String key) {
        if (cache.containsKey(key)) {
            cache.remove(key);
        }
    }

    public void clearCache() {
        cache.clear();
    }
}

提供用戶查詢的服務(wù)類,此服務(wù)類使用緩存管理器來支持用戶查詢。

public class UserService {

    private CacheManager cacheManager;

    public UserService() {
        cacheManager = new CacheManager();
    }

    @Cacheable(cacheNames = "users")
    public User getUserById(String userId) {
        // 方法內(nèi)部實(shí)現(xiàn)不考慮緩存邏輯,直接實(shí)現(xiàn)業(yè)務(wù)
        System.out.println("read quert user. " + userId);
        return getFromDB(userId);
    }

    public void reload() {
        cacheManager.clearCache();
    }

    private User getFromDB(String userId) {
        return new User(userId);
    }

}

使用SpringCache 來實(shí)現(xiàn)上面的例子:

public class UserServiceUseSpringCache {

    private CacheManager cacheManager;

    public UserServiceUseSpringCache() {
        cacheManager = new CacheManager();
    }

    public User getUserById(String userId) {
        User result = cacheManager.getValue(userId);
        if (result != null) {
            System.out.println("get from cache..." + userId);
            // 如果在緩存中,則直接返回緩存的結(jié)果
            return result;
        }

        // 否則從數(shù)據(jù)庫(kù)查詢
        result = getFromDB(userId);
        if (result != null) {
            // 將數(shù)據(jù)庫(kù)查詢的結(jié)果更新到緩存中
            cacheManager.addOrUpdate(userId, result);
        }
        return result;

    }

    public void reload() {
        cacheManager.clearCache();
    }

    private User getFromDB(String userId) {
        return new User(userId);
    }

}

現(xiàn)在還需要一個(gè)Spring 配置文件來支持基于注解的緩存:

 

 
 

  

 
 
  
  
  

  
  
  
  

上面在UserService代碼中沒有看到任何緩存邏輯代碼,只需一個(gè)注解@Cacheable(cacheNames="users"),就實(shí)現(xiàn)了基本的緩存方案,代碼變得非常優(yōu)雅、簡(jiǎn)潔。使用Spring Cache 只需完成以下兩個(gè)步驟:

  • 緩存定義: 確定需要緩存的方法和緩存策略
  • 緩存配置: 配置緩存

網(wǎng)站名稱:阿里P7架構(gòu)師分享:15分鐘快速掌握SpringCache(使用詳解)
本文地址:http://weahome.cn/article/gogiih.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部