tft每日頭條

 > 生活

 > redis緩存策略和持久化機制

redis緩存策略和持久化機制

生活 更新时间:2024-12-26 10:50:14

1、什麼是緩存穿透?

緩存穿透是指客戶端請求的數據在緩存中和數據庫中都不存在,這樣緩存永遠不會生效,這些請求都會打到數據庫。

2、常見的解決緩存穿透有哪些方法

(1)緩存空對象

優點:實現簡單,維護方便

缺點:額外的内存消耗,和可能造成短期的不一緻

針對缺點内存消耗我們可以設置key的過期時間,針對于短期不一緻性,我們可以在更新數據庫的同時更新緩存;

redis緩存策略和持久化機制(淺聊Redis緩存穿透)1

(1)布隆過濾器

redis緩存策略和持久化機制(淺聊Redis緩存穿透)2

對于布隆過濾器的實現,我們放在後面的章節中講解;

3、代碼實現緩存空對象,解決緩存穿透現象:

redis緩存策略和持久化機制(淺聊Redis緩存穿透)3

public <R,ID> R queryWithPassThrough( String keyPrefix, ID id, Class<R> type, Function<ID, R> dbFallback, Long time, TimeUnit unit){ String key = keyPrefix id; // 1.從redis查詢商鋪緩存 String JSON = stringRedisTemplate.opsForValue().get(key); // 2.判斷是否存在 if (StrUtil.isNotBlank(json)) { // 3.存在,直接返回 return JSONUtil.toBean(json, type); } // 判斷命中的是否是空值 if (json != null) { // 返回一個錯誤信息 return null; } // 4.不存在,根據id查詢數據庫 R r = dbFallback.apply(id); // 5.不存在,返回錯誤 if (r == null) { // 将空值寫入redis stringRedisTemplate.opsForValue().set(key, "", CACHE_NULL_TTL, TimeUnit.MINUTES); // 返回錯誤信息 return null; } // 6.存在,寫入redis this.set(key, r, time, unit); return r; }

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved