All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.openea.eap.framework.redis.config.EapCacheAutoConfiguration Maven / Gradle / Ivy

The newest version!
package org.openea.eap.framework.redis.config;

import cn.hutool.core.util.StrUtil;
import org.openea.eap.framework.redis.core.TimeoutRedisCacheManager;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.cache.CacheProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.cache.BatchStrategies;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.cache.RedisCacheWriter;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.util.StringUtils;

import java.util.Objects;

import static org.openea.eap.framework.redis.config.EapRedisAutoConfiguration.buildRedisSerializer;

/**
 * Cache 配置类,基于 Redis 实现
 */
@AutoConfiguration
@EnableConfigurationProperties({CacheProperties.class, EapCacheProperties.class})
@EnableCaching
public class EapCacheAutoConfiguration {

    /**
     * RedisCacheConfiguration Bean
     * 

* 参考 org.springframework.boot.autoconfigure.cache.RedisCacheConfiguration 的 createConfiguration 方法 */ @Bean @Primary public RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties) { RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig(); // 设置使用 : 单冒号,而不是双 :: 冒号,避免 Redis Desktop Manager 多余空格 // 详细可见 https://blog.csdn.net/chuixue24/article/details/103928965 博客 // 再次修复单冒号,而不是双 :: 冒号问题,Issues 详情:https://gitee.com/zhijiantianya/eap-cloud/issues/I86VY2 config = config.computePrefixWith(cacheName -> { String keyPrefix = cacheProperties.getRedis().getKeyPrefix(); if (StringUtils.hasText(keyPrefix)) { keyPrefix = keyPrefix.lastIndexOf(StrUtil.COLON) == -1 ? keyPrefix + StrUtil.COLON : keyPrefix; return keyPrefix + cacheName + StrUtil.COLON; } return cacheName + StrUtil.COLON; }); // 设置使用 JSON 序列化方式 config = config.serializeValuesWith( RedisSerializationContext.SerializationPair.fromSerializer(buildRedisSerializer())); // 设置 CacheProperties.Redis 的属性 CacheProperties.Redis redisProperties = cacheProperties.getRedis(); if (redisProperties.getTimeToLive() != null) { config = config.entryTtl(redisProperties.getTimeToLive()); } if (!redisProperties.isCacheNullValues()) { config = config.disableCachingNullValues(); } if (!redisProperties.isUseKeyPrefix()) { config = config.disableKeyPrefix(); } return config; } @Bean public RedisCacheManager redisCacheManager(RedisTemplate redisTemplate, RedisCacheConfiguration redisCacheConfiguration, EapCacheProperties eapCacheProperties) { // 创建 RedisCacheWriter 对象 RedisConnectionFactory connectionFactory = Objects.requireNonNull(redisTemplate.getConnectionFactory()); RedisCacheWriter cacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(connectionFactory, BatchStrategies.scan(eapCacheProperties.getRedisScanBatchSize())); // 创建 TenantRedisCacheManager 对象 return new TimeoutRedisCacheManager(cacheWriter, redisCacheConfiguration); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy