spring boot 集成 redis 缓存

在spring中使用redis缓存有如下方式:

  • 直接使用各种redis客户端提供的接口
  • 使用spring data redis
  • 使用spring caching 注解

直接使用客户端提供的接口

这个没什么好说的, 直接看相应客户端的文档就行了, 当前redis有非常多的客户端
官网的客户端列表: https://redis.io/clients
在java语言方面, 官网推荐: Jedis, lettuce, Redisson
其中spring boot默认的客户端是lettuce .
因为每个客户端都有自己的API, 如果深入集成到项目中, 后续需要更换就比较麻烦, 建议使用后面两种访问方式, 对于特殊功能才直接使用客户端接口.

使用spring data redis

官方文档: https://docs.spring.io/spring-data/redis/docs/2.1.7.RELEASE/reference/html/
这种方式需要Redis客户端支持spring data redis.
使用spring data redis :

  • 导入依赖 compile(“org.springframework.boot:spring-boot-starter-data-redis:${springbootVersion}”)
  • 创建Redis连接
  • 使用RedisTemplate操作数据.

创建redis连接

RedisConnection 是对连接的抽像, 提供了操作Redis的接口, 并处理了网络层的细节.
RedisConnection是通过RedisConnectionFactory创建的.
每个Redis客户端都会实现RedisConnectionFactory的子类, 实现创建RedisConnection的功能.

下面是一个配置使用Redisson客户端的示例

  @Bean
  public RedissonClient redissonClient() {
        Config config = new Config();
        SingleServerConfig singleServer = config.useSingleServer();
        singleServer
                .setClientName(applicationName)
                .setAddress("redis://" + host + ":" + port)
                .setPassword(password);
        return Redisson.create(config);
    }

    @Bean
    public RedisConnectionFactory redisConnectionFactory(RedissonClient redissonClient) {
        return new RedissonConnectionFactory(redissonClient);
    }

使用RedisTemplate操作数据

RedisTemplate是spring data redis操作redis数据的一组接口, 详细使用见官网.
在使用之前, 可以做一些配置, 比如key和value的序列化器, 下面是一个配置示例.

    private GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer() {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
        return new GenericJackson2JsonRedisSerializer(objectMapper);
    }

    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<Object, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);
        template.setKeySerializer(new StringRedisSerializer()); // 配置key序列化方式
        template.setValueSerializer(genericJackson2JsonRedisSerializer()); //配置value序列化方式
        template.setEnableTransactionSupport(false); // 关闭事务
        return template;
    }

    @Bean
    public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory){
        StringRedisTemplate template = new StringRedisTemplate();
        template.setConnectionFactory(redisConnectionFactory);
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(genericJackson2JsonRedisSerializer());
        template.setEnableTransactionSupport(false);
        return template;
    }

使用spring caching 注解

配置Spring Caching需要创建CacheManager, 下面是配置示例:

    @Bean
    public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory,
                                     RedisCacheConfiguration redisCacheConfiguration) {
        return RedisCacheManager.builder(redisConnectionFactory)
                .cacheDefaults(redisCacheConfiguration)
                .build();
    }

    @Bean
    public RedisCacheConfiguration redisCacheConfiguration() {
        RedisSerializationContext.SerializationPair<String> keySerializationPair
                = RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer());
        RedisSerializationContext.SerializationPair<?> valueSerializationPair
                = RedisSerializationContext.SerializationPair.fromSerializer(genericJackson2JsonRedisSerializer());
        return RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofMillis(expireTime)) //配置超时时间
                .serializeKeysWith(keySerializationPair) //配置key序列化方式
                .serializeValuesWith(valueSerializationPair) //配置vaue序列化方式
                .disableCachingNullValues();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值