SpringBoot @Cacheable Redis 設置緩存過期時間


1.x 設置
@Bean
@Primary
public CacheManager cacheManager(RedisTemplate redisTemplate) {
RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate);

Map<String, Long> expires = new HashMap<>();

expires.put("timeout", 60L);

// 設置超時
// 根據特定名稱設置有效時間
redisCacheManager.setExpires(expires);

// 設置默認的時間
redisCacheManager.setDefaultExpiration(cacheDefaultExpiration);

return redisCacheManager;

}
使用方式:
轉載:傳送門


@Configuration
//@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 3600 * 12)//最大過期時間
@EnableCaching
public class RedisConfig {
@Bean
public CacheManager cacheManager(RedisTemplate redisTemplate) {
RedisCacheManager rcm = new RedisCacheManager(redisTemplate);
//設置緩存過期時間
Map<String, Long> expires = new HashMap<>();
expires.put("12h", 3600 * 12L);
expires.put("1h", 3600 * 1L);
expires.put("10m", 60 * 10L);
rcm.setExpires(expires);
// rcm.setDefaultExpiration(60 * 60 * 12);//默認過期時間
return rcm;
}
}


//----------------------------------------------------------

@Cacheable(value = "12h", key = "#root.methodName")
@Override
public List<User> getUserArticleRank() {
//獲得排行榜前10名的用戶,每12小時刷新一次
return userRepository.findTop10ByArticleSize();
}
2.x 設置
轉載:傳送門

/**
* 2.XX版本的配置
*
*/
@Bean
public CacheManager cacheManager(RedisConnectionFactory factory) {
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig(); // 生成一個默認配置,通過config對象即可對緩存進行自定義配置
config = config.entryTtl(Duration.ofMinutes(2)) // 設置緩存的默認過期時間,也是使用Duration設置
.disableCachingNullValues(); // 不緩存空值

// 設置一個初始化的緩存空間set集合
Set<String> cacheNames = new HashSet<>();
cacheNames.add("catalog_test_id");
cacheNames.add("catalog_test_name");

// 對每個緩存空間應用不同的配置
Map<String, RedisCacheConfiguration> configMap = new HashMap<>();
configMap.put("catalog_test_id", config);
configMap.put("catalog_test_name", config.entryTtl(Duration.ofMinutes(5)));

RedisCacheManager cacheManager = RedisCacheManager.builder(factory) // 使用自定義的緩存配置初始化一個cacheManager
.initialCacheNames(cacheNames) // 注意這兩句的調用順序,一定要先調用該方法設置初始化的緩存名,再初始化相關的配置
.withInitialCacheConfigurations(configMap)
.build();
return cacheManager;
}
@CacheConfig(cacheNames = "catalog_test_name")
public class SsoCache{
@Cacheable(keyGenerator = "wiselyKeyGenerator")
public String getTokenByGsid(String gsid)
}

-------------------------------------
使用(name中增加“#”,后面是過期時間,不加則走默認時間)

@Cacheable(cacheNames = "catalog_test_name#120", unless = "#result==null")
public UserEntity findUserByUserName(String userName) {
return userRepository.findUserByUserName(userName);
}

 轉自:https://blog.csdn.net/qq_28114159/article/details/106098180


免責聲明!

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



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