SpringBoot整合SpringDataRedis、基本操作,以及创建配置类指定序列化策略

官网

https://spring.io/projects/spring-boot#learn

SpringBoot整合SpringDataRedis、基本操作,以及创建配置类指定序列化策略_第1张图片

https://docs.spring.io/spring-boot/docs/2.4.13/reference/html/

SpringBoot整合SpringDataRedis、基本操作,以及创建配置类指定序列化策略_第2张图片

https://docs.spring.io/spring-boot/docs/2.4.13/reference/html/spring-boot-features.html#boot-features

SpringBoot整合SpringDataRedis、基本操作,以及创建配置类指定序列化策略_第3张图片

https://docs.spring.io/spring-boot/docs/2.4.13/reference/html/spring-boot-features.html#boot-features-redis

SpringBoot整合SpringDataRedis、基本操作,以及创建配置类指定序列化策略_第4张图片

点击上面 Spring Data Redis
https://github.com/spring-projects/spring-data-redis
可以在README中查看需要的内容,比如:

SpringBoot整合Spring Data Redis

添加pom依赖


    org.springframework.boot
    spring-boot-starter-data-redis


redis自动配置类:RedisAutoConfiguration

SpringBoot整合SpringDataRedis、基本操作,以及创建配置类指定序列化策略_第5张图片

属性配置类RedisProperties

@ConfigurationProperties(prefix = "spring.redis")
public class RedisProperties {

	/**
	 * Database index used by the connection factory.
	 */
	private int database = 0;

	/**
	 * Connection URL. Overrides host, port, and password. User is ignored. Example:
	 * redis://user:[email protected]:6379
	 */
	private String url;

	/**
	 * Redis server host.
	 */
	private String host = "localhost";

	/**
	 * Login username of the redis server.
	 */
	private String username;

	/**
	 * Login password of the redis server.
	 */
	private String password;

	/**
	 * Redis server port.
	 */
	private int port = 6379;

	/**
	 * Whether to enable SSL support.
	 */
	private boolean ssl;

	/**
	 * Read timeout.
	 */
	private Duration timeout;

	/**
	 * Connection timeout.
	 */
	private Duration connectTimeout;

	/**
	 * Client name to be set on connections with CLIENT SETNAME.
	 */
	private String clientName;

	/**
	 * Type of client to use. By default, auto-detected according to the classpath.
	 */
	private ClientType clientType;

	private Sentinel sentinel;

	private Cluster cluster;

	private final Jedis jedis = new Jedis();

	private final Lettuce lettuce = new Lettuce();

        ......

我们的配置文件application.properties中可以配置redis,以spring.redis开头

# 服务器ip
spring.redis.host=116.10.53.66
# 端口
spring.redis.port=6379
# 密码
spring.redis.password=tester
# 第一个数据库存储
spring.redis.database=0
# 最大活跃数
spring.redis.jedis.pool.max-active=20
# 最大空闲数
spring.redis.jedis.pool.max-idle=10
# 最小空闲数
spring.redis.jedis.pool.min-idle=5

使用redisTemplate

操作字符串

key和value都不设置序列化器

package com.qzcsbj.demo;

import org.junit.jupiter.api.Test;
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.core.StringRedisTemplate;


/**
 * @公众号 : 全栈测试笔记
 * @博客 : www.cnblogs.com/uncleyong
 * @微信 : ren168632201
 * @描述 : <>
 */
@SpringBootTest
public class MyTest {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void test1(){
        redisTemplate.opsForValue().set("name","jack");
        System.out.println("set字符串完成。");
        Object name = redisTemplate.opsForValue().get("name");
        System.out.println("获取到的name: " + name);
    }
}

代码中正常获取

但是redis客户端不行

SpringBoot整合SpringDataRedis、基本操作,以及创建配置类指定序列化策略_第6张图片

给key和value设置序列化器

package com.qzcsbj.demo;

import org.junit.jupiter.api.Test;
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.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;


/**
 * @公众号 : 全栈测试笔记
 * @博客 : www.cnblogs.com/uncleyong
 * @微信 : ren168632201
 * @描述 : <>
 */
@SpringBootTest
public class MyTest {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void test1(){
        // 为key设置序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        // 为value设置序列化器
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        redisTemplate.opsForValue().set("name","jack");
        System.out.println("set字符串完成。");
        Object name = redisTemplate.opsForValue().get("name");
        System.out.println("获取到的name: " + name);
    }
}

操作对象

只为value设置了序列化器

package com.qzcsbj.demo;

import com.qzcsbj.demo.pojo.User;
import org.junit.jupiter.api.Test;
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.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;


/**
 * @公众号 : 全栈测试笔记
 * @博客 : www.cnblogs.com/uncleyong
 * @微信 : ren168632201
 * @描述 : <>
 */
@SpringBootTest
public class MyTest {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void test1(){
        User user = new User();
        user.setUsername("jack");
        user.setPassword("123456");
        // 设置value序列化器
        redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
        redisTemplate.opsForValue().set("user",user);
        System.out.println("set对象完成。");
        System.out.println("user: " + redisTemplate.opsForValue().get("user"));
    }
}

为key和value设置序列化器

package com.qzcsbj.demo;

import com.qzcsbj.demo.pojo.User;
import org.junit.jupiter.api.Test;
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.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;


/**
 * @公众号 : 全栈测试笔记
 * @博客 : www.cnblogs.com/uncleyong
 * @微信 : ren168632201
 * @描述 : <>
 */
@SpringBootTest
public class MyTest {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void test1(){
        User user = new User();
        user.setUsername("jack");
        user.setPassword("123456");
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
        redisTemplate.opsForValue().set("user",user);
        System.out.println("set对象完成。");
        System.out.println("user: " + redisTemplate.opsForValue().get("user"));
    }
}

value序列化方式采用jackson

package com.qzcsbj.demo;

import com.qzcsbj.demo.pojo.User;
import org.junit.jupiter.api.Test;
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.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;


/**
 * @公众号 : 全栈测试笔记
 * @博客 : www.cnblogs.com/uncleyong
 * @微信 : ren168632201
 * @描述 : <>
 */
@SpringBootTest
public class MyTest {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void test1(){
        User user = new User();
        user.setUsername("jack");
        user.setPassword("123456");
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        // 设置value序列化器
        // redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
        // value序列化方式采用jackson
        redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(User.class));
        redisTemplate.opsForValue().set("user",user);
        System.out.println("set对象完成。");
        System.out.println("user: " + redisTemplate.opsForValue().get("user"));
    }
}

操作list

package com.qzcsbj.demo;

import com.qzcsbj.demo.pojo.User;
import org.junit.jupiter.api.Test;
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.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import java.util.ArrayList;
import java.util.List;


/**
 * @公众号 : 全栈测试笔记
 * @博客 : www.cnblogs.com/uncleyong
 * @微信 : ren168632201
 * @描述 : <>
 */
@SpringBootTest
public class MyTest {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void test1(){
        List users = new ArrayList<>();
        User user = new User();
        user.setUsername("jack");
        user.setPassword("123456");
        users.add(user);
        User user2 = new User();
        user2.setUsername("tom");
        user2.setPassword("654321");
        users.add(user2);
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
        redisTemplate.opsForValue().set("users",users);
        System.out.println("set集合完成。");
        System.out.println("users: " + redisTemplate.opsForValue().get("users"));
    }
}

value序列化方式采用jackson

package com.qzcsbj.demo;

import com.qzcsbj.demo.pojo.User;
import org.junit.jupiter.api.Test;
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.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import java.util.ArrayList;
import java.util.List;


/**
 * @公众号 : 全栈测试笔记
 * @博客 : www.cnblogs.com/uncleyong
 * @微信 : ren168632201
 * @描述 : <>
 */
@SpringBootTest
public class MyTest {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void test1(){
        List users = new ArrayList<>();
        User user = new User();
        user.setUsername("jack");
        user.setPassword("123456");
        users.add(user);
        User user2 = new User();
        user2.setUsername("tom");
        user2.setPassword("654321");
        users.add(user2);

        redisTemplate.setKeySerializer(new StringRedisSerializer());
        // 设置value序列化器
        // redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
        // value序列化方式采用jackson
        redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(List.class));
        redisTemplate.opsForValue().set("users",users);
        System.out.println("set集合完成。");
        System.out.println("users: " + redisTemplate.opsForValue().get("users"));
    }
}

使用stringRedisTemplate(更简单)

操作字符串

package com.qzcsbj.demo;

import com.qzcsbj.demo.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.util.ArrayList;
import java.util.List;


/**
 * @公众号 : 全栈测试笔记
 * @博客 : www.cnblogs.com/uncleyong
 * @微信 : ren168632201
 * @描述 : <>
 */
@SpringBootTest
public class MyTest {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Test
    public void test2(){
        stringRedisTemplate.opsForValue().set("name","jack");
        System.out.println("set字符串完成。");
        Object name = stringRedisTemplate.opsForValue().get("name");
        System.out.println("获取到的name: " + name);
    }
}

操作对象

package com.qzcsbj.demo;

import com.qzcsbj.demo.pojo.User;
import com.qzcsbj.demo.utils.JsonUtil;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.util.ArrayList;
import java.util.List;


/**
 * @公众号 : 全栈测试笔记
 * @博客 : www.cnblogs.com/uncleyong
 * @微信 : ren168632201
 * @描述 : <>
 */
@SpringBootTest
public class MyTest {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Test
    public void test2(){
        User user = new User();
        user.setUsername("jack");
        user.setPassword("123456");
        stringRedisTemplate.opsForValue().set("user",JsonUtil.objectToJson(user));
        System.out.println("set对象完成。");
        System.out.println("user: " + stringRedisTemplate.opsForValue().get("user"));
    }
}

操作list

package com.qzcsbj.demo;

import com.qzcsbj.demo.pojo.User;
import com.qzcsbj.demo.utils.JsonUtil;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import springfox.documentation.spring.web.json.Json;
import java.util.ArrayList;
import java.util.List;


/**
 * @公众号 : 全栈测试笔记
 * @博客 : www.cnblogs.com/uncleyong
 * @微信 : ren168632201
 * @描述 : <>
 */
@SpringBootTest
public class MyTest {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Test
    public void test2(){
        List users = new ArrayList<>();
        User user = new User();
        user.setUsername("jack");
        user.setPassword("123456");
        users.add(user);
        User user2 = new User();
        user2.setUsername("tom");
        user2.setPassword("654321");
        users.add(user2);
        // 对象转为json字符串
        stringRedisTemplate.opsForValue().set("users",JsonUtil.objectToJson(users));
        System.out.println("set集合完成。");
        System.out.println("users: " + stringRedisTemplate.opsForValue().get("users"));
    }
}

使用总结 

如果用redisTemplate,一般是创建配置类自定义RedisTemplate来设置序列化器

package com.qzcsbj.demo.config;

import org.springframework.beans.factory.annotation.Autowired;
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 org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * @公众号 : 全栈测试笔记
 * @博客 : www.cnblogs.com/uncleyong
 * @微信 : ren168632201
 * @描述 : <>
 */
@Configuration
public class RedisConfig {

    @Autowired
    private RedisConnectionFactory connectionFactory;

    @Bean
    public RedisTemplate redisTemplate(){
        RedisTemplate redisTemplate=new RedisTemplate<>();
        redisTemplate.setConnectionFactory(connectionFactory);
        // 指定key、value的序列化策略
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());

        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }

    @Bean
    public StringRedisTemplate stringRedisTemplate(){
        StringRedisTemplate stringRedisTemplate=new StringRedisTemplate();
        stringRedisTemplate.setConnectionFactory(connectionFactory);
        return stringRedisTemplate;
    }
}

【bak】
原文已更新: https://www.cnblogs.com/uncleyong/p/17196440.html

你可能感兴趣的:(spring,boot,spring,java,mybatis,redis)