數據字典的緩存刷新與讀取的幾種方式


之前有寫過數據字典的相關業務是怎么做的,有朋友留言問如何讀取,其實很簡單,最簡單的方式就是每次讀取數據庫,但是這樣的做法很不好,因為數據字典在數據庫中屬於冷資源,不是經常會變得數據,這樣的數據用緩存來做是最好的,在訪問數據庫前就直接攔截了去數據庫的請求,這樣減少數據庫的壓力,畢竟很多頁面對於數據字典的訪問還是偏多的

畫張圖簡單了解一下就行:

那怎么把數據放入redis中呢?主流的兩種做法大致說一下吧:

  1. 在每次進行增刪改數據字典的操作后,發送一個消息隊列,進行單獨記錄在redis中的維護(這樣的做法我個人不是很喜歡,因為有時候寫錯了就要重修修改或者刪除,這樣的頻繁操作比較多)

  2. 在每次進行數據字典的增刪改后,最后手動執行刷新,這樣批量把數據放入緩存中,最后在頁面上就能直接用了

在此小編我用的是第二種做法,如圖:


在之前的頁面上加了刷新緩存的按鈕,動態ajax到后台,讀取數據庫中的數據字典再刷新到緩存中去(有人說這樣頻繁的操作會很不好,話是這么說,但是這樣的操作權限僅限在項目發布成功后,再執行的操作,一般都是大半夜,毫無影響..--)

先來看一下數據庫的數據

再看一下緩存中的數據


不難看出,都是一一對應的

最后再來看一下自定義標簽,這個主要的目的就是接受jsp上傳來的key和對應的數據字典code,最后把value返回出來

private JedisClient jedis = SpringUtils.getContext().getBean(JedisClient.class);
    
    public void doTag() throws JspException, IOException {
        if (StringUtils.isNotEmpty(typeCode) && StringUtils.isNotEmpty(ddKey)) {
            String ddValue = jedis.get(CACHE_DATA_DICTS + ":" + typeCode + ":" + ddKey);

            JspWriter out = getJspContext().getOut();
            out.println(ddValue);
        } else {
            getJspBody().invoke(sw);
            getJspContext().getOut().println(sw.toString());
        }
    }

 

<div class="caption">
                         
                         性別:<dataDict:dataDictValue ddKey="1" typeCode="sex"/>
                         <br/>
                         車輛類型:<dataDict:dataDictValue ddKey="1" typeCode="car_type"/>
                         
                     </div>

 

頁面效果:

題外話,這樣的做法僅限jsp頁面,如果你的數據是由JS render出來的話(比如jqgrid啊等等),那就可以寫一個js類對象,每次傳入code和key調用ajax從緩存中讀取即可。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM