redis緩存有效期
A. redis怎麼清除緩存
Redis清除緩存的方法有多種,可以通過不同的命令和策略來實現。
詳細解釋如下:
1. 使用FLUSH命令
Redis提供了FLUSH命令來清除緩存。其中,`FLUSHALL`命令用於清除所有key,而`FLUSHDB`命令僅清除當前資料庫的key。這些命令會立即刪除所有相關鍵,從而清空緩存。但需要注意的是,這些操作是不可逆的,一旦執行,數據將永久丟失。因此,在執行前需要謹慎考慮。
2. 使用DEL命令
除了FLUSH命令,還可以使用DEL命令來刪除特定的key,從而清除相應的緩存項。與FLUSH不同,DEL允許你按需刪除特定的數據。這是一種更靈活的方式,可以根據實際需求來清除緩存。
3. 使用EXPIRE命令設置緩存過期時間
另一種策略是設置緩存的過期時間。通過EXPIRE命令,你可以為key設置一個過期時間。當key達到設定的時間後,Redis會自動刪除該key及其相關的緩存數據。這種方式適用於那些有生命周期限制的緩存數據。
4. 使用Redis策略配置
除了上述操作命令,還可以通過Redis的配置策略來管理緩存。例如,可以設置Redis的持久化策略,定期將數據持久化到磁碟,同時清理內存中的緩存數據。此外,還可以結合Redis的驅逐策略,在緩存達到上限時自動刪除不常用的數據。
總的來說,Redis提供了多種方法和策略來清除緩存。在使用時,應根據實際需求和數據重要性來選擇合適的方法。同時,操作前務必謹慎,確保不會誤刪重要數據。通過合理配置和使用Redis,可以有效地管理緩存,提高系統的性能和響應速度。
B. 自定義rediscachemanager
在項目的Redis配置類RedisConfig中,自定義名為cacheManager的Bean組件,用於Redis緩存管理。
java
@Bean
public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
創建String和JSON格式序列化對象,分別用於緩存數據key和value的轉換。
RedisSerializer strSerializer = new StringRedisSerializer();
Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class);
解決查詢緩存轉換異常問題,使用ObjectMapper進行序列化。
ObjectMapper om = new ObjectMapper();
設置ObjectMapper的可見性和非最終類型,以適應序列化。
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
定製序列化方式,使用序列化對象對key和value進行序列化。
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofDays(1))
.serializeKeysWith(RedisSerializationContext.SerializationPair
.fromSerializer(strSerializer))
.serializeValuesWith(RedisSerializationContext.SerializationPair
.fromSerializer(jacksonSeial))
.disableCachingNullValues();
構建緩存管理器,設置緩存默認配置。
RedisCacheManager cacheManager = RedisCacheManager
.builder(redisConnectionFactory).cacheDefaults(config).build();
返回自定義的緩存管理器。
}
自定義的RedisCacheManager中,通過`@Bean`註解實現,包含對緩存數據key和value的序列化方式定製。使用`StringRedisSerializer`和`Jackson2JsonRedisSerializer`分別進行字元串和JSON格式的序列化,同時設定緩存有效期為1天。
完成自定義後,可進行測試以驗證效果。使用自定義序列化機制的RedisCacheManager時,實體類無需實現序列化介面。
學習上述內容,可參考拉勾教育的《Java工程師高薪訓練營》課程,該課程提供全面的知識體系和內推大廠服務。建議感興趣的朋友也查看。
C. Redis緩存過期機制
一、針對與設置了過期時間的key值
1.(主動)定期刪除:定時隨機的檢查過期的key,如果過期則清理刪除
redis.conf(每秒檢查的次數1-500)配置: hz 10
2.(被動)惰性刪除:當客戶端請求到一個已經過期的key時,redis會檢查是否過期並刪除
所以,雖然key過期了,但是沒被清理的話,還是會占內存的。
二、內存淘汰管理機制Memory Management
當內存占滿之後,redis提供緩存淘汰機制。
redis.conf: maxmemory <bytes>
* noeviction:舊緩存永不過期,新緩存設置不了,返回錯誤
* allkeys-lru:清除最少用的舊緩存,然後保存新的緩存(推薦使用)
* allkeys-random:在所有的緩存中隨機刪除(不推薦)
* volatile-lru:在那些設置了expire過期時間的緩存中,清除最少用的舊緩存,然後保存新的緩存
* volatile-random:在那些設置了expire過期時間的緩存中,隨機刪除緩存
* volatile-ttl:在那些設置了expire過期時間的緩存中,刪除即將過期的