桥下红药

机器应该工作、人类应该思考

SpringBoot日常 – Redis 接管Cacheable和Session缓存

java 评论已关闭

1) SpringBoot 使用 Redis 存储Session

配置 application.properties

# REDIS (RedisProperties)
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=localhost
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.jedis.pool.max-active=120
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.jedis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.jedis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.jedis.pool.min-idle=0
spring.redis.timeout=3600

添加 redis 依赖

implementation 'org.springframework.session:spring-session-data-redis'
// springboot缓存功能依赖
implementation 'org.springframework.boot:spring-boot-starter-cache'

最后 SpringBootApplication 添加上就配置好了

// 开启httpSession使用Redis存储
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 21600)
//启用springboot缓存功能
@EnableCaching

2) SpringBoot 使用 Redis 作为Cacheable的缓存

继续上面的步骤,上面的配置不可少。

再添加一个依赖库

implementation 'org.springframework.boot:spring-boot-starter-data-redis'
//顾名思义 就是redis的数据缓存模块

创建 RedisCacheConfig 控制Redis过期时间等

@Configuration
public class RedisCacheConfig {

    @Bean
    public KeyGenerator simpleKeyGenerator() {
        return (o, method, objects) -> {
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.append(o.getClass().getSimpleName());
            stringBuilder.append(".");
            stringBuilder.append(method.getName());
            stringBuilder.append("[");
            for (Object obj : objects) {
                stringBuilder.append(obj.toString());
            }
            stringBuilder.append("]");

            return stringBuilder.toString();
        };
    }

    @Bean
    public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
        return new RedisCacheManager(
                RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory),
                this.getRedisCacheConfigurationWithTtl(600), // 默认策略,未配置的 key 会使用这个
                this.getRedisCacheConfigurationMap() // 指定 key 策略
        );
    }

    private Map<String, RedisCacheConfiguration> getRedisCacheConfigurationMap() {
        Map<String, RedisCacheConfiguration> redisCacheConfigurationMap = new HashMap<>();
        //设置该Key的有效时长
        redisCacheConfigurationMap.put("cache_key_1", this.getRedisCacheConfigurationWithTtl(60));
        return redisCacheConfigurationMap;
    }

    private RedisCacheConfiguration getRedisCacheConfigurationWithTtl(Integer seconds) {
        RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
        redisCacheConfiguration = redisCacheConfiguration.entryTtl(Duration.ofSeconds(seconds));
        return redisCacheConfiguration;
    }
}

最后添加缓存注解即可!

@Cacheable(value = "cache_key_1", unless = "#result == null", keyGenerator = "simpleKeyGenerator")
public Object testController(){
    return "json";
}

上一篇

评论已关闭。