在項目中redis做緩存的一些思路

在項目中redis做緩存的一些思路

首先,緩存的對象有三種:

1:數據庫中單條的的數據(以表名跟id作為key永久保存到redis),在有更新的地方都要更新緩存(不適用於需要經常更新的數據);

2:對於一些不分頁,不需要實時(需要多表查詢)的列表,我們可以將列表結果緩存到redis中,設定一定緩存時間作為該數據的存活時間。用獲取該列表的方法名作為key,列表結果為value;這種情況只試用於不經常更新且不需要實時的情況下。

3:不需要實時的,需要分頁的列表:可以把分頁的結果列表放到一個map(key為分頁標識,value為分頁結果)中,然後將該map存到redis的list中(用該方法名為key)。然後給該list設置一個緩存存活時間(用expire)。這樣通過方法名lrange出來就能獲取存有分頁列表的數據,遍歷該list,通過遍歷list中map的key判斷該分頁數據是否在緩存內,是則返回,不存在則rpush進去。這種做法能解決比如1-5頁的數據已經重新加載,而6-10頁的數據依然是緩存的數據而導致髒數據的情況。

本人走過的一些彎路:

1.對於數據緩存不是所有東西都緩存到redis就是好的,而是要針對一些改動不大或者訪問率大的數據進行緩存來減少關係型數據庫的壓力。

2.不要試圖在攔截器或者過濾器中判斷是否有緩存的存在,因為每個請求(不管該請求對應的方法是否做了緩存)它都會去redis中請求數據並判斷,這樣會浪費一定的內存資源跟響應時間。所以應該針對需要緩存的方法進行判斷。

3.一個方法中使用多個get或者set的方法,我們需要儘可能的減少去jedispool中獲取jedis對象,所以在一個方法中應該只獲取一次jedis對象,在方法結束的時候把該對象return還給連接池,這樣才能做到儘可能的高效。

4.在設置連接池中參數的時候要考慮到自身系統需求,不然會經常出現連接池中無可用對象獲取,spring時不時發起連接請求到redis等不必要的錯誤和資源浪費。


分享到:


相關文章: