准备工作

   安装redis最新4.0.6或者以前版本,尽量安装在linux上,并开启服务。教程很多,不再赘述。

   在JAVASE 可以使用最新Jedis 2.9.0或之前版本。与数据库连接池相同,单例实例化JedisPool,从中getSource()获取Jedis实例。

   本文主旨记录,springMVC或者SpringBoot整合Redis

SpringBoot整合Redis

        pom.xml中引入redis依赖,使用版本1.5.2:

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

  在resources中配置application.properties,自动创建JedisConnectionFactory

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

  以上工作完成后,就要获取RedisTemplate对象,SpringBoot已经自动配置此对象,需要直接Autowire便可使用。在spring.redis.core中有许多数据模型,使用StringRedisTemplate对Map<String,String>操作是比较方便的,客户端不会出现/Xe/XA序列化加密形式的存储,方便后台维护。通过valOps进行set/get操作,具体代码见下:

 @Autowired
    private StringRedisTemplate<Object, Object> stringRedisTemplate;
 @Resource(name=“stringRedisTemplate”) 
     private ValueOperations<Object,Object> valOps;

 但存储不一定都只会使用String类型变量,所以需要重新定义RedisTemplate,使key使用StringRedisSerializer序列化,value使用Jackson2JsonRedisSerializer序列化

@Configuration
public class configuration {
    @Bean
    public RedisTemplate<Object,Object> redisTemplate(RedisConnectionFactory factory){

         RedisTemplate<Object,Object> template=new RedisTemplate<Object, Object>();

         template.setConnectionFactory(factory);

        Jackson2JsonRedisSerializer valueSerializer=new Jackson2JsonRedisSerializer(Object.class);

        ObjectMapper om=new ObjectMapper();

        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);

        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

        valueSerializer.setObjectMapper(om);

        template.setValueSerializer(valueSerializer);

        template.setKeySerializer(new StringRedisSerializer());
return template; } }

 在UserDao中,注入redisTemplate对象,可使用不同的类,比如HashOperation/SetOperation/ZSetOperation/ListOperation四大基本类型的操作和一些redis操作。ValueOperation提供get set 和multiget multiset等操作,但若需要事物或者删除操作,需要获取valOps.getOperation()再进行操作。

    @Autowired
    private RedisTemplate<Object, Object> redisTemplate;
    @Resource(name="redisTemplate")
    private ValueOperations<Object,Object> valOps;

 

SpringMVC整合Redis

   在springMvc进行整合,只是将RedisConnectionFactory通过配置文件进行实例化,配置文件与application.properties相同。只需在上面配置类里加上JedisConnectionFactory注入代码,见下:

    @Value("${spring.redis.database}")
    private int dateBase;
    @Value("${spring.redis.host}")
    private String host;
    @Value("${spring.redis.port}")
    private int port;
    @Value("${spring.redis.password}")
    private String password;
    @Value("${spring.redis.pool.max-active}")
    private int maxTotal;
    @Value("${spring.redis.pool.max-wait}")
    private int maxWait;
    @Value("${spring.redis.pool.max-idle}")
    private int maxIdle;
    @Value("${spring.redis.pool.min-idle}")
    private int minIdle;
    @Value("${spring.redis.timeout}")
    private int timeout;

    @Bean
    JedisConnectionFactory redisConnectionFactory() {
        JedisConnectionFactory factory = new JedisConnectionFactory();
        factory.setDatabase(dateBase);
        factory.setHostName(host);
        factory.setPort(port);
        factory.setPassword(password);
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxIdle(maxIdle);
        poolConfig.setMinIdle(minIdle);
        poolConfig.setMaxWaitMillis(maxWait);
        poolConfig.setMaxTotal(maxTotal);
        factory.setPoolConfig(poolConfig);
        factory.setTimeout(timeout);
        return factory;
    }