Spring Boot系列筆記--整合Redis

那股哇發表於2020-10-29

基本環境搭建

  • 匯入依賴
    <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();
        }
    

相關文章