Springboot结合Redis

安装 Redis
 
安装 gcc
Yum install gcc-c++

 

解压 redis.3.0.0.tar.gz 压缩包
tar -zxvf redis-3.0.0.tar.gz

 

进入解压后的目录进行编译
cd redis-3.0.0
make

 

Redis 安装到指定目录
make PREFIX=/usr/local/redis install

 

启动 Redis
./redis-server

 

Spring Boot 整合 Spring Data Redis
Spring Data Redis 是属于 Spring Data 下的一个模块。作用就是简化对于 redis 的操做

 

修改 pom 文件添加 Spring Data Redis 的坐标
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.bjsxt</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-data-redis</name>
    <description>spring-data-redis</description>

    <properties>
        <java.version>1.8</java.version>
        <jedis>3.1.0</jedis>
    </properties>

    <dependencies>
<!--        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
            <version>${spring.data.redis}</version>
        </dependency>
        -->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>${jedis}</version>
        </dependency>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

 

 

编写 Spring Data Redis 的配置类(重点)

 

com.bjsxt.redis.RedisConfig

package com.bjsxt.redis;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.JedisPoolConfig;

/**
 * 完成对Redis整合的配置
 */
@Configuration
public class RedisConfig {
    /**
     * 1.创建 JedisPoolConfig 对象。在该对象中完成一些链接池配置
     */
    @Bean
    @ConfigurationProperties(prefix = "spring.redis.jedis.pool")
    public JedisPoolConfig JedisPoolConfig(){
        JedisPoolConfig config=new JedisPoolConfig();
        config.setMaxIdle(10);//设置最大空闲数
        config.setMinIdle(5);//设置最小空闲数
        config.setMaxTotal(20);//设置最大连接数
        return config;
    }

    /**
     * 2.创建 JedisConnectionFactory 对象,配置Redis连接属性
     * @param config
     * @return
     */
    @Bean
    @ConfigurationProperties(prefix = "spring.redis")
    public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig config){
        JedisConnectionFactory factory=new JedisConnectionFactory();
        factory.setPoolConfig(config);//关联连接池的配置对象
        factory.setHostName("192.168.181.133");//设置连接主机
        factory.setPort(6379);//设置端口号
        return factory;
    }

    /**
     * 3.创建RedisTemplate,用于执行Redis操作的方法
     * @param factory
     * @return
     */
    @Bean
    public RedisTemplate<String,Object> redisTemplate(JedisConnectionFactory factory){
        RedisTemplate<String,Object> template =new RedisTemplate<>();
        //关联JedisConnectionFactory
        template.setConnectionFactory(factory);
        //为key序列化器
        template.setKeySerializer(new StringRedisSerializer());
        //为value设置序列化器
        template.setValueSerializer(new StringRedisSerializer());

        return template;
    }

}

 

编写测试代码,测试整合环境
编写测试类
package com.bjsxt.test;

import com.bjsxt.SpringDataRedisApplication;
import com.bjsxt.pojo.Users;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = SpringDataRedisApplication.class)
public class RedisTest {

    @Autowired
    RedisTemplate redisTemplate;

    /**
     * 测试Redis添加
     */
    @Test
    public void testRedisSet(){
        redisTemplate.opsForValue().set("name","yxf");
    }

    /**
     * 测试Redis查询
     */
    @Test
    public void testRedisGet(){
        String value = (String) redisTemplate.opsForValue().get("name");
        System.out.println(value);
    }

    /**
     * 测试Redis添加对象
     */
    @Test
    public void testRedisSetUsers(){
        Users users=new Users();
        users.setUname("张三");
        users.setAge(18);
        users.setSex("男");
        redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
        redisTemplate.opsForValue().set("users",users);
    }

    /**
     * 测试Redis获取对象
     */
    @Test
    public void testRedisGetUsers(){
        redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
        Users users = (Users) redisTemplate.opsForValue().get("users");
        System.out.println(users);
    }

    /**
     * 测试Redis添加json数据
     */
    @Test
    public void testRedisSetUSersJson(){
        Users users=new Users();
        users.setUname("李四");
        users.setAge(20);
        users.setSex("女");
        redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(Users.class));
        redisTemplate.opsForValue().set("users-json",users);
    }

    /**
     * 测试Redis获取json数据
     */
    @Test
    public void testRedisGetJson(){
        redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(Users.class));
        Users users = (Users) redisTemplate.opsForValue().get("users-json");
        System.out.println(users);
    }
}

 

 

提取 redis 的配置信息

 

src/main/resource/目录下新建一个配置文件:application.properties
spring.redis.jedis.pool.max-idle=10
spring.redis.jedis.pool.min-idle=5
spring.redis.jedis.pool.max-total=20
spring.redis.hostName=192.168.181.133
spring.redis.port=6379

 

 

修改配置类
package com.bjsxt.redis;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.JedisPoolConfig;

/**
 * 完成对Redis整合的配置
 */
@Configuration
public class RedisConfig {
    /**
     * 1.创建 JedisPoolConfig 对象。在该对象中完成一些链接池配置
     */
    @Bean
    @ConfigurationProperties(prefix = "spring.redis.jedis.pool")
    public JedisPoolConfig JedisPoolConfig(){
        JedisPoolConfig config=new JedisPoolConfig();
        /*config.setMaxIdle(10);//设置最大空闲数
        config.setMinIdle(5);//设置最小空闲数
        config.setMaxTotal(20);//设置最大连接数*/
        System.out.println("默认值:"+config.getMaxIdle());
        System.out.println("默认值:"+config.getMinIdle());
        System.out.println("默认值:"+config.getMaxTotal());
        return config;
    }

    /**
     * 2.创建 JedisConnectionFactory 对象,配置Redis连接属性
     * @param config
     * @return
     */
    @Bean
    @ConfigurationProperties(prefix = "spring.redis")
    public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig config){
        System.out.println("配置完毕:"+config.getMaxIdle());
        System.out.println("配置完毕:"+config.getMinIdle());
        System.out.println("配置完毕:"+config.getMaxTotal());
        JedisConnectionFactory factory=new JedisConnectionFactory();
        factory.setPoolConfig(config);//关联连接池的配置对象
       /* factory.setHostName("192.168.181.133");//设置连接主机
        factory.setPort(6379);//设置端口号*/
        return factory;
    }

    /**
     * 3.创建RedisTemplate,用于执行Redis操作的方法
     * @param factory
     * @return
     */
    @Bean
    public RedisTemplate<String,Object> redisTemplate(JedisConnectionFactory factory){
        RedisTemplate<String,Object> template =new RedisTemplate<>();
        //关联JedisConnectionFactory
        template.setConnectionFactory(factory);
        //为key序列化器
        template.setKeySerializer(new StringRedisSerializer());
        //为value设置序列化器
        template.setValueSerializer(new StringRedisSerializer());

        return template;
    }




}

 

 

 

 

posted @ 2019-12-11 08:56  sakura-yxf  阅读(876)  评论(0)    收藏  举报