Spring Boot系列笔记--整合Redis

基本环境搭建

  • 导入依赖
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    
  • 配置文件配置Redis主机地址,端口默认6379
    spring.redis.host=127.0.0.1
    

RedisTemplate

@Autowired
StringRedisTemplate stringRedisTemplate;

@Autowired
RedisTemplate redisTemplate;
  • 两者都是操作Redis数据库,区别如下:
    • 两者的关系是StringRedisTemplate继承于RedisTemplate
    • RedisTemplate使用的是JdkSerializationRedisSerializer,存入数据会将数据先序列化成字节数组然后在存入Redis数据库;StringRedisTemplate使用的是StringRedisSerializer
    • StringRedisTemplate操作的K-V是字符串类型,RedisTemplate操作的K-V是对象类型
  • RedisTemplate类中提供了Redis常见的五种数据类型
    stringRedisTemplate.opsForValue()[String(字符串)]
    stringRedisTemplate.opsForList()[List(列表)]
    stringRedisTemplate.opsForSet()[Set(集合)]
    stringRedisTemplate.opsForHash()[Hash(散列)]
    stringRedisTemplate.opsForZSet()[ZSet(有序集合)]
    
  • 如果操作的是对象,则要考虑序列化与反序列化的问题,可参考RedisAutoConfiguration.class改变默认的序列化规则,Redis支持以下的序列化器
    在这里插入图片描述
    自定义序列化器
    @Configuration
    public class MyRedisConfig {
          
          
        @Bean
        public RedisTemplate<Object, Employee> empRedisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
          
          
            RedisTemplate<Object, Employee> template = new RedisTemplate();
            template.setConnectionFactory(redisConnectionFactory);
            //使用Jackson2JsonRedisSerializer完成对象序列化与json之间的转换
            Jackson2JsonRedisSerializer<Employee> serializer = new Jackson2JsonRedisSerializer<>(Employee.class);
            template.setDefaultSerializer(serializer);
            return template;
        }
    }
    
    这样对象就保存为JSON格式

CacheManager

  • 原理:CacheManager管理Cache组件,Cache组件实际操作数据
    1. 引入redis的starter,容器中保存的是RedisCacheManager
    2. RedisCacheManager 帮我们创建 RedisCache 来作为缓存组件;RedisCache通过操作redis缓存数据的
    3. 默认创建的RedisCacheManager操作redis的时候使用的是RedisTemplate<Object, Object>,默认使用JDK的序列化机制
  • 自定义CacheManager,保存对象为JSON格式
    @Bean
        RedisCacheManager cacheManager( RedisConnectionFactory redisConnectionFactory) {
          
          
            // 使用缓存的默认配置
            RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
            // 使用 GenericJackson2JsonRedisSerializer 作为序列化器
            config = config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
            RedisCacheManager.RedisCacheManagerBuilder builder = RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(config);
    
            return builder.build();
        }
    

猜你喜欢

转载自blog.csdn.net/weixin_44863537/article/details/109347588