热爱技术,追求卓越
不断求索,精益求精

简单配置使用redis缓存,针对springboot2.x

pom.xml引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

application.properties中配置:

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

添加一个RedisTemplate的子类,用于针对redis的操作,不使用springboot默认的RedisTemplate。springboot默认的RedisTemplate参考org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration。使用下面的CustomRedisTemplate覆盖默认的RedisTemplate主要是为了可以自定义一些序列化方式,不使用默认的序列化方式。

package cn.lovecto.promotion.cache;

import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * 自定义redis模板
 *
 */
public class CustomRedisTemplate extends RedisTemplate<String, Object>{

    /**
     * 默认的自定义序列号方式,key为字符串
     * @param connectionFactory
     */
    public CustomRedisTemplate(RedisConnectionFactory connectionFactory) {
        RedisSerializer<String> stringSerializer = new StringRedisSerializer();
        setKeySerializer(stringSerializer);
        setHashKeySerializer(stringSerializer);
        setConnectionFactory(connectionFactory);
        afterPropertiesSet();
    }

    /**
     * 自定义redis模板,key为字符串
     * @param connectionFactory 连接工厂
     * @param valueSerializer 值序列化方式
     */
    public CustomRedisTemplate(RedisConnectionFactory connectionFactory, RedisSerializer<Object> valueSerializer){
        RedisSerializer<String> stringSerializer = new StringRedisSerializer();
        setKeySerializer(stringSerializer);
        setHashKeySerializer(stringSerializer);
        setConnectionFactory(connectionFactory);
        setValueSerializer(valueSerializer);
        setHashValueSerializer(valueSerializer);
        afterPropertiesSet();
    }
}

CustomRedisTemplate类中,如果不指定值的序列化方式则使用默认序列化方式,否则使用指定的序列化方式,但不管怎么样,key的序列化都使用String.

redis的配置类如下RedisConfig:

package cn.lovecto.promotion.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;

import cn.lovecto.promotion.cache.CustomRedisTemplate;

@Configuration
public class RedisConfig {

    @Bean(name = "redisTemplate") 
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory){
        CustomRedisTemplate template = new CustomRedisTemplate(factory);
        return template;
    }
}

测试代码如下:

@Autowired
private RedisTemplate<String, Object> redisTemplate;

@Test
public void test(){
    String key = "sean.promotion.test";
    redisTemplate.opsForValue().set(key, "12345");
    System.out.println(redisTemplate.opsForValue().get(key));
}

总结:使用字符串作为key可以见名知意,也便于运维的一些操作,否则将可能使用jdk默认的序列化方式,不利于运维。本文基于springboot2.0.1.RELEASE

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.1.RELEASE</version>
</parent>
赞(1)
未经允许不得转载:LoveCTO » 简单配置使用redis缓存,针对springboot2.x

热爱技术 追求卓越 精益求精