// 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()); }