连接到Redis

Redis连接工厂会生成到Redis数据库服务器的连接。Spring Data Redis为四种Redis客户端实现提供了连接工厂:

JedisConnectionFactory
    JredisConnectionFactory
    LettuceConnectionFactory
    SrpConnectionFactory

jedis redisTemplate 命令对比 redistemplate与jedis_springboot

如果使用其他连接工厂可以简单的替换如:

jedis redisTemplate 命令对比 redistemplate与jedis_redis_02

所有的Redis连接工厂都具有setHostName()、setPort()和setPassword()方法。这样,它们在配置方面实际上是相同的。

Spring Data Redis提供了两个模板:
1.RedisTemplate

2.StringRedisTemplate

    RedisTemplate可以极大地简化Redis数据访问,能够让我们持久化各种类型的key和value,并不局限于字节数组。在认识到key和value通常是String类型之后,StringRedisTemplate扩展了RedisTemplate,只关注String类型。假设我们已经有了RedisConnectionFactory,那么可以按照如下的方式构建RedisTemplate:

jedis redisTemplate 命令对比 redistemplate与jedis_springboot_03

jedis redisTemplate 命令对比 redistemplate与jedis_springboot_04

RedisTemplate的很多功能是以子API的形式提供的:

jedis redisTemplate 命令对比 redistemplate与jedis_redis_05

jedis redisTemplate 命令对比 redistemplate与jedis_springboot_06

每个子API都提供了使用数据条目的操作,基于value中所包含的是单个值还是一个值的集合它们会有所差别。

由于方法太多我简单的使用set和get方法做演示:(具体请查看官方文档)

@RestController
public class RedisTemplateController {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Autowired
    private RedisTemplate redisTemplate;

    @RequestMapping("redis/get")
    public String get(){
        stringRedisTemplate.opsForValue().set("zzf","欧哈哟");
        return stringRedisTemplate.opsForValue().get("zzf");
    }

    @RequestMapping("redis/get2")
    public String get2(){
        redisTemplate.opsForValue().set("zzf2","欧哈哟哈哈哈");
        return (String)redisTemplate.opsForValue().get("zzf2");
    }
}

jedis redisTemplate 命令对比 redistemplate与jedis_RedisTemplate_07

OK~

使用list的话如:

jedis redisTemplate 命令对比 redistemplate与jedis_spring_08

使用set如:

jedis redisTemplate 命令对比 redistemplate与jedis_spring_09

有兴趣的可以去看api文档学习这些方法……不过我个人更喜欢Jedis直观,简单方便……

使用key和value的序列化器

当某个条目保存到Redis key-value存储的时候,key和value都会使用Redis的序列化器(serializer)进行序列化。Spring Data Redis提供了当某个条目保存到Redis key-value存储的时候,key和value都会使用Redis的序列化器(serializer)进行序列化。

Spring Data Redis提供了多个这样的序列化器,包括:

1.GenericToStringSerializer:使用Spring转换服务进行序列化;

2.JacksonJsonRedisSerializer:使用Jackson 1,将对象序列化为JSON;

3.Jackson2JsonRedisSerializer:使用Jackson 2,将对象序列化为JSON;

4.JdkSerializationRedisSerializer:使用Java序列化;

5.OxmSerializer:使用Spring O/X映射的编排器和解排器(marshaler和unmarshaler)实现序列化,用于XML序列化;

6.StringRedisSerializer:序列化String类型的key和value。

假设当使用RedisTemplate的时候,我们希望将Product类型的value序列化为JSON,而key是String类型。RedisTemplate的setKeySerializer()和setValueSerializer()方法就需要如下所示:

下面附上我的SpringBoot集成RedisTemplate的配置步骤:

1.导入jar包,我这里使用的是maven

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

2.配置application.properties

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

3.使用

package com.zzf.finals.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class RedisTemplateController {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Autowired
    private RedisTemplate redisTemplate;

    @RequestMapping("redis/get")
    public String get(){
        stringRedisTemplate.opsForValue().set("zzf","欧哈哟");
        return stringRedisTemplate.opsForValue().get("zzf");
    }

    @RequestMapping("redis/get2")
    public String get2(){
        redisTemplate.opsForValue().set("zzf2","欧哈哟哈哈哈");
        return (String)redisTemplate.opsForValue().get("zzf2");
    }
}

jedis redisTemplate 命令对比 redistemplate与jedis_spring_10

jedis redisTemplate 命令对比 redistemplate与jedis_RedisTemplate_11


参考《spring实战》