// 1.0
@Value("${erp.cache.expireation:32400}") // in seconds 9小時
private long cacheExpiration;
@Value("#{${erp.cache.expires:{'activity:goods':600,'ordercount':300}}}")
private Map<String, Long> expires;
@Bean
public CacheManager cacheManager(RedisTemplate redisTemplate) {
RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate);
// 開啟使用緩存名稱最為key前綴
redisCacheManager.setUsePrefix(false);
//這里可以設置一個默認的過期時間 單位是秒
redisCacheManager.setDefaultExpiration(cacheExpiration);
// 設置緩存的過期時間
redisCacheManager.setExpires(expires);
return redisCacheManager;
}
//2.0
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
//初始化一個RedisCacheWriter
RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory);
//設置CacheManager的值序列化方式為json序列化
RedisSerializer<Object> jsonSerializer = new GenericJackson2JsonRedisSerializer();
RedisSerializationContext.SerializationPair<Object> pair = RedisSerializationContext.SerializationPair
.fromSerializer(jsonSerializer);
RedisCacheConfiguration defaultCacheConfig=RedisCacheConfiguration.defaultCacheConfig()
.serializeValuesWith(pair);
//設置默認超過期時間是600秒
defaultCacheConfig.entryTtl(Duration.ofSeconds(cacheExpiration));
//初始化RedisCacheManager
return new RedisCacheManager(redisCacheWriter, defaultCacheConfig);
}
來自:https://www.cnblogs.com/wjx6270/p/11568202.html
https://www.cnblogs.com/dadiwm321/p/springboot_redis.html
https://www.cnblogs.com/ffaiss/p/11435775.html
@Bean
public RedisCacheManager redisCacheManager(RedisTemplate redisTemplate) {
//spring cache注解序列化配置
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisTemplate.getKeySerializer())) //key序列化方式
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisTemplate.getValueSerializer())) //value序列化方式
.disableCachingNullValues() //不緩存null值
.entryTtl(Duration.ofSeconds(cacheExpiration)); //默認緩存過期時間
// 對每個緩存名稱應用不同的配置,自定義過期時間
Map<String, RedisCacheConfiguration> expires=new HashMap<>();
expires.put("activity:goods",redisCacheConfiguration.entryTtl(Duration.ofSeconds(600)));
expires.put("ordercount",redisCacheConfiguration.entryTtl(Duration.ofSeconds(300)));
RedisCacheManager redisCacheManager = RedisCacheManager.builder(redisTemplate.getConnectionFactory())
.cacheDefaults(redisCacheConfiguration)
.transactionAware()
.initialCacheNames(expires.keySet()) // 注意這兩句的調用順序,一定要先調用該方法設置初始化的緩存名,再初始化相關的配置
.withInitialCacheConfigurations(expires)
.build();
return redisCacheManager;
}
來自:https://www.cnblogs.com/wjx6270/p/11568202.html
https://www.cnblogs.com/dadiwm321/p/springboot_redis.html
https://www.cnblogs.com/ffaiss/p/11435775.html
@Override
public void cacheMsgShop() {
List<MsgUnreadCount> list=msgShopMapper.findShop();
if(list==null||list.size()==0)return;
logger.info("--mgs size:{}",list.size());
final Cache cache = cacheManager.getCache(CACHE_NAME);
if(cache == null){
return;
}
for (int i = 0; i < list.size(); i++) {
MsgUnreadCount msg=list.get(i);
long shopId=msg.getShopId();
int num=msg.getNum();
cache.put(shopId,num);
}
}
@Override
public int findByShopId(long shopId) {
final Cache cache = cacheManager.getCache(CACHE_NAME);
if(cache == null){
return 0;
}
Cache.ValueWrapper valueWrapper=cache.get(shopId);
if(valueWrapper==null){
return 0;
}
return Integer.valueOf( valueWrapper.get().toString());
}