SpringBoot篇——SpringBoot集成Redis,详细教程,一篇搞定!

了解redis在springboot中的自动配置类

分析源码,SpringBoot的底层,会对每一个功能都写一个自动配置类autoXXX,所以Redis也会存在。
找到这个自动配置类,分析这个配置类做了哪些事儿

另外每一个自动配置类都和一个.properties配置类进行绑定,我们可以通过他绑定的方式,在application.properties中个性化的配置

集成方法

一、导入整合的依赖

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

二、配置连接,在application.properties中写

#配置Redis
#配置主机
spring.redis.host=127.0.0.1
#配置端口
spring.redis.port=6379


三、测试   

@SpringBootTest
class SpringbootRedisApplicationTests {
    //想在springboot中使用redis,首先先将spring中给我们写的模板注入进来
    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    void contextLoads() {
//可以操作不同的数据类型......
        //操作字符串,类似于String
        redisTemplate.opsForValue().set("name","张三");
        //操作List集合,类似于List
        redisTemplate.opsForList();

//除了基本的操作,我们还可以直接操作redisTemplate来执行事务或者增删改查

    }

}

自定义RedisTemplate(学习配置的内容)

一、首先我们需要了解为什么我们非得要自定义redisTemplate呢?
源码中的模板对于数据序列化是这么处理的

二、编写流程
在config包下新建一个类,命名为RedisConfig,将来关于Redis的配置都写在这个类中即可
这段配置,如果我们真正项目中用到了redis,直接拿着用

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
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.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

//Redis配置类,需要用@Configuration注解标记这个类是一个配置类
//现在这个配置类是一个固定的模板,如果需要配置redis,直接拿走用即可
@Configuration
public class RedisConfig {
    //编写我们自己的RedisTemplate
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
        template.setConnectionFactory(redisConnectionFactory);

        //Json序列化配置
        //设置序列化的方式,想要用jackson序列化,直接new出它的对象,传object.class,表示解析任何的对象,放进setKeySerializer方法中即可
        Jackson2JsonRedisSerializer<Object> objectJackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        objectJackson2JsonRedisSerializer.setObjectMapper(om);

        //string的序列化
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();

        //key采用String的序列化方式
        template.setKeySerializer(stringRedisSerializer);
        //hash的key采用String的序列化方式
        template.setHashKeySerializer(stringRedisSerializer);
        //value的序列化采用jackson
        template.setValueSerializer(objectJackson2JsonRedisSerializer);
        //hash的value采用jackson
        template.setHashValueSerializer(objectJackson2JsonRedisSerializer);

        template.afterPropertiesSet();
        return template;
    }
}

拓展:将常规对象转化成json对象的方法(序列化的重要性)

@SpringBootTest
class SpringbootRedisApplicationTests {
    //想在springboot中使用redis,首先先将spring中给我们写的模板注入进来
    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    void contextLoads() {
//可以操作不同的数据类型......
        //操作字符串,类似于String
        redisTemplate.opsForValue().set("name","张三");
        //操作List集合,类似于List
        redisTemplate.opsForList();

//除了基本的操作,我们还可以直接操作redisTemplate来执行事务或者增删改查

    }

    @Test
    public void test() throws JsonProcessingException {
        //真是开发中一般都是使用json来传递对象
        User user = new User("张三",12);

        //调用ObjectMapper()方法,调用writeValueAsString方法将常规的对象转化成json对象
        String jsonUser = new ObjectMapper().writeValueAsString(user);
        redisTemplate.opsForValue().set("user",jsonUser);
        redisTemplate.opsForValue().get("user");
    }

}

序列化在将来的企业级开发中是非常常见的,所有的pojo类基本上都要先实现serializable接口,我们系统默认的序列化的方式是jdk,如果想要自定义序列化的方式,那么就要去上文中复习自定义的方法!
真实的开发中都是用json来传递对象,所以转化的方法很重要!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Be explorer

若认可笔者文章,手头富裕望支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值