當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
缓存-SpringCache-原理与不足
生活随笔
收集整理的這篇文章主要介紹了
缓存-SpringCache-原理与不足
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原理分析
在 Spring 中 CacheManager 負責創建管理 Cache,Cache 負責緩存的讀寫,因此使用 redis 作為緩存對應的就有 RedisCacheManager 和 RedisCache。
打開 RedisCache 源碼,我們需要注意這兩個方法:
1、讀取數據,未加鎖
@Override protected Object lookup(Object key) {byte[] value = cacheWriter.get(name, createAndConvertCacheKey(key));if (value == null) {return null;}return deserializeCacheValue(value); }2、讀取數據,加鎖,這是 RedisCache 中唯一一個同步方法
@Override public synchronized <T> T get(Object key, Callable<T> valueLoader) {ValueWrapper result = get(key);if (result != null) {return (T) result.get();}T value = valueFromLoader(key, valueLoader);put(key, value);return value; }通過打斷點的方式可以知道 RedisCache 默認調用的是 lookup(),因此不能應對緩存穿透,如果有相關需求,可以這樣配置:@Cacheable(sync = true),開啟同步模式,此配置只在?@Cacheable?中才有。
總結
Spring Cache 對于讀模式下緩存失效的解決方案:
- 緩存穿透:cache-null-values: true,允許寫入空值
- 緩存擊穿:@Cacheable(sync = true),加鎖
- 緩存雪崩:time-to-live:xxx,設置不同的過期時間
而對于寫模式,Spring Cache 并沒有相應處理,我們需要使用其它方式處理。
總的來說:
1、對于常規數據(讀多寫少,及時性、一致性要求不高的數據)完全可以使用 Spring Cache
2、對于特殊數據(比如要求高一致性)則需要特殊處理
?
總結
以上是生活随笔為你收集整理的缓存-SpringCache-原理与不足的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 缓存-SpringCache-自定义缓存
- 下一篇: 缓存-SpringCache-整合体验@