Redis 与SpringBoot

414 阅读2分钟

redis在springboot中的源生使用方法

又是令人熟悉的 ****Template

  • SpringBoot中Template是不需要手动@Bean。类可以直接注入依赖

代码示例

  • 配置文件
spring.redis.host=192.168.171.131
spring.redis.port=6379
  • ping-pong
@SpringBootTest
class RedisSpringBoot01ApplicationTests {
    @Autowired
    private RedisTemplate<String, String> redisTemplate;
    @Test
    void contextLoads() {
        RedisConnection connection = redisTemplate.getConnectionFactory().getConnection();
        System.out.println(connection.ping());//方式一,用connection  ping
        System.out.println(redisTemplate.execute(RedisConnectionCommands::ping));//方式二
    }
    public String ping(){
        return redisTemplate.execute((RedisCallback<String>) connection -> connection.ping());//方式二的本体
    }
}

其它用法

  • 针对Redis不同类型的操作

image.png

  • opsFor***()方法后又有基操(增删改查)

image.png

如何配置模板类,以及如何配置序列化

  • 目标:让存进Redis中的对象实现序列化(Serializable),即使实体类没有继承Serializable接口,所以自己更改模板类。
  • 为什么可以自定义模板类,点开源码瞧一瞧

image.png

  • 自定义模板类(创建Config类)
@Configuration
public class MyRedisConfig {
    @Bean
    @SuppressWarnings ( "all")
    public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
        template.setConnectionFactory(factory);//通过实例化
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        //这将使所有成员字段都可序列化,而无需进一步的注释,而不仅仅是公共字段(默认设置)
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        /*
        该值表示将对所有非最终类型使用默认类型,但少数“自然”类型(字符串,布尔值,整数,双精度)除外,
        可以从JSON正确推断出这些类型; 以及所有非最终类型的数组
         */
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        //ObjectMapper是进一步控制JSON序列化过程的一种方法
        jackson2JsonRedisSerializer.setObjectMapper(om);
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        //key采用string的序列化方式
        template.setKeySerializer(stringRedisSerializer);
        //hash 的hey也采用String的序列化方式
        template.setHashKeySerializer(stringRedisSerializer);
        //vaLue序列化方式采用jackson
        template.setValueSerializer(jackson2JsonRedisSerializer);
        //hash 的value序列化方式采用jackson
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        //当设置了所有bean属性后,此方法允许bean实例执行其整体配置的验证和最终初始化。
        template.afterPropertiesSet();
        return template;
    }
}

引入Utils工具类

bug收集

image.png

image.png

@Autowirednew 是两个世界的东西,一个在Spring中(IOC),一个独立在外