根据b站UP主狂神说Redis课程所写的个人学习笔记

视频地址:https://www.bilibili.com/video/BV1S54y1R7SB


springboot操作数据:spring-data jpa jdbc mongodb redis

springdata也是和springboot齐名的项目

新建一个springboot项目,在nosql分类中勾选redis

在springboot2.x之后,原来使用的jedis被替换为了lettuce

jedis:采用的直连,多个线程操作是不安全的,如果想要避免不安全,使用jedis pool连接池,更像BIO模式

lettuce:采用netty,实例可以在多个线程中共享,不存在线程不安全的情况,可以减少线程数量,更像NIO模式

源码分析:

@Bean
@ConditionalOnMissingBean(
    name = {"redisTemplate"}//可以自定义一个redisTemplate来替换默认
)
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
//默认的redistemplate 没有过多的设置,redis对象都是需要序列化的
//两个泛型都是object类型,需要强制转换<String,object>
    RedisTemplate<Object, Object> template = new RedisTemplate();
    template.setConnectionFactory(redisConnectionFactory);
    return template;
}

@Bean
@ConditionalOnMissingBean//操作string类型的bean
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
    StringRedisTemplate template = new StringRedisTemplate();
    template.setConnectionFactory(redisConnectionFactory);
    return template;
}

整合测试:

1.导入依赖

2.连接配置

#在application.properties配置redis

spring.redis.host=127.0.0.1
spring.redis.port=6379

3.测试

class Redis02SpringbootApplicationTests {
    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    void contextLoads() {
        //redisTemplate 操作不同数据类型
        //opsForValue 字符串操作
        //opsForList 列表操作
        //opsForSet 集合操作
        //....

        //除了基本操作,我们常用的方法都可以直接通过redisTemplate操作,比如事务和基本的curd
        //获取连接对象
//        RedisConnection connection = redisTemplate.getConnectionFactory().getConnection();
//        connection.flushDb();
        redisTemplate.opsForValue().set("mykey","lin");
        System.out.println(redisTemplate.opsForValue().get("mykey"));

    }

}

Redis个人学习笔记6---Springboot整合

默认的序列化方式是jdk序列化,我们可能使用json来序列化

Redis个人学习笔记6---Springboot整合

没有序列化则会报错

Redis个人学习笔记6---Springboot整合

public class RedisConfig {
    //自己定义一个rediscomplate
    @Bean
    @SuppressWarnings("all")
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)  {
        RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
        Jackson2JsonRedisSerializer objectJackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_CONCRETE_AND_ARRAYS);
        objectJackson2JsonRedisSerializer.setObjectMapper(om);
        //String 的序列化
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        
        //配置具体序列化方式 key用string value用json
        template.setKeySerializer(stringRedisSerializer);
        template.setHashKeySerializer(stringRedisSerializer);
        template.setValueSerializer(objectJackson2JsonRedisSerializer);
        template.setHashValueSerializer(objectJackson2JsonRedisSerializer);
        template.afterPropertiesSet();
        
        return template;
    }

测试成功

Redis个人学习笔记6---Springboot整合

 

 

相关文章: