SpringBoot整合SpringDataRedis

目录

1 简介

2 主要源码

2.1 pom.xml

2.2 Spring Data Redis的配置类

3 提前redis的参数为配置文件

3.1 配置文件application.properties

3.2 修改配置类

4 SpringDataRedis操作实体对象

4.1 实体对象,注意序列化

4.2 测试代码

5 SpringDataRedis以JSON格式存储实体对象


1 简介

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

2 主要源码

2.1 pom.xml

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>2.1.3.RELEASE</version>
    </parent>

    <groupId>cn.jzh</groupId>
    <artifactId>maven_jsp_demo</artifactId>
    <version>1.0-SNAPSHOT</version>


    <dependencies>
        <!--        springboot 启动器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--        springdata redis jpa -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
        </dependency>
        <!--测试方法-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>


        <!-- springboot热部署配置 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>springloaded</artifactId>
            <version>1.2.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

2.2 Spring Data Redis的配置类

注意: 必须对redis的键和值进行序列化操作 

比如:在同一个方法中先set,再get,正常获得数据,但是,在不同的方法中 先set,再get获取不到数据,通过redis的monitor监控发现了命令的问题:实际执行的命令多了好多其他字符,就是序列化问题导致的,springdataredis里面必须对对象进行序列化处理,否则会报错,而且怎么序列化存储的也要怎么序列化取出

package cn.config;

import org.springframework.beans.factory.annotation.Qualifier;
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;
@Configuration
public class RedisConfig {
    /**
     * 创建jedispoolredis对象
     */
    @Bean
    public JedisPoolConfig jedisPoolConfig(){
        JedisPoolConfig config = new JedisPoolConfig();
        //最大连接数
        config.setMaxIdle(10);
        //最小空闲数
        config.setMinIdle(5);
        //最大链接数
        config.setMaxTotal(20);
        return config;
    }

    /**
     * 创建jedisConnectionFactory:配置redis连接信息
     */
    @Bean
    public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig config){
        JedisConnectionFactory factory = new JedisConnectionFactory();
        //配置连接信息
        factory.setPoolConfig(config);
        //配置redis主机host
        factory.setHostName("192.168.126.133");
        factory.setPort(6379);

        return factory;
    }
    /**
     * 创建RedisTemplate:用于执行Redis操作的方法
     */
   /* 在同一个方法中
    1.先set,再get,正常获得数据。
    在不同的方法中 先set,再get获取不到数据,通过redis的monitor监控发现了命令的问题:
    实际key为JK_HASH:csrk,hashkey为user,实际执行的命令多了好多其他字符,就是序列化问题导致的
    springdataredis里面必须对对象进行序列化处理,否则会报错
    */
    @Bean
    public RedisTemplate<String,Object> redisTemplate(@Qualifier("jedisConnectionFactory") JedisConnectionFactory factory){
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        //关联
        template.setConnectionFactory(factory);
        //为key设置序列化器
        template.setKeySerializer(new StringRedisSerializer());
        //为value设置序列化器
        template.setKeySerializer(new StringRedisSerializer());
        return template;
    }
}

2.3 测试类

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes= APP.class)
public class TestRedis {
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    /**
     * 添加字符串
     */
    @Test
    public void testSet(){
        redisTemplate.opsForValue().set("temo","测试redis");
    }
    /**
     * 获取字符串
     */
    @Test
    public void tesGet(){
        String str = (String)redisTemplate.opsForValue().get("temo");
        System.out.println(str);
    }
}

3 提前redis的参数为配置文件

src/main/resource/ 目 录 下 新 建 一 个 配 置 文 件:application.properties

3.1 配置文件application.properties

spring.redis.pool.max-idle=10 
spring.redis.pool.min-idle=5 
spring.redis.pool.max-total=20 
spring.redis.hostName=192.168.70.128 
spring.redis.port=6379

3.2 修改配置类

@Configuration
public class RedisConfig {
    /**
     * 1.创建JedisPoolConfig对象。在该对象中完成一些链接池配置
     * @ConfigurationProperties:会将前缀相同的内容创建一个实体。
     */
    @Bean
    @ConfigurationProperties(prefix = "spring.redis.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链接信息
     */
    @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);
        //配置链接Redis的信息
        //主机地址
		/*factory.setHostName("192.168.70.128");
		//端口
		factory.setPort(6379);*/
        return factory;
    }
    /**
     * 3.创建RedisTemplate:用于执行Redis操作的方法
     */
    @Bean
    public RedisTemplate<String,Object> redisTemplate(@Qualifier("jedisConnectionFactory") JedisConnectionFactory factory){

        RedisTemplate<String, Object> template = new RedisTemplate<>();
        //关联
        template.setConnectionFactory(factory);
        //为key设置序列化器
        template.setKeySerializer(new StringRedisSerializer());
        //为value设置序列化器
        template.setKeySerializer(new StringRedisSerializer());
        return template;
    }

}

4 SpringDataRedis操作实体对象

4.1 实体对象,注意序列化

public class Users implements Serializable {
    private Integer id;
    private String userName;
    private Integer age;

    //省去getset方法

    @Override
    public String toString() {
        return "Users{" +
                "id='" + id + '\'' +
                ", userName='" + userName + '\'' +
                ", age='" + age + '\'' +
                '}';
    }
}

4.2 测试代码

注意:此处可以修改redis值序列化为对象序列化,也可以不用,但是报错了,就试试对象序列化

@Test
    public void testSetUsers(){
        Users u = new Users();
        u.setAge(20);
        u.setId(12);
        u.setUserName("张三丰");

        //重新设置序列化器是把二进制以字符串的形式存储
        redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
        redisTemplate.opsForValue().set("user12", u);
    }
    @Test
    public void testGetUsers(){
        //重新设置序列化器,是把二进制以字符串的形式反序列化出来
        redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
        Users u = (Users)redisTemplate.opsForValue().get("user12");
        System.out.println(u);
    }

5 SpringDataRedis以JSON格式存储实体对象

注意:json序列化存储时,若取出也应该用json样式反序列化才能取出

@Test
    public void setJson(){
        Users users = new Users();
        users.setAge(20);
        users.setUserName("李四丰");
        users.setId(1);
        redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(Users.class));
        redisTemplate.opsForValue().set("user_json", users);
    }
    @Test
    public void getJson(){
        redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(Users.class));
        Users u = (Users)redisTemplate.opsForValue().get("user_json");
        System.out.println(u);
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值