Spring Boot穴埋めマニュアル:redisとcacheの穴

7933 ワード

高同時性を処理する際、キャッシュをよく使います.まず、redisの構成、注意事項について話します.
pom.xmlにspring-boot-starter-data-redisとspring-boot-starter-cacheを導入する必要があるこのように導入すると、キャッシュ構成はデフォルトでredisとなり、redisを構成するにはアプリケーションが必要になる.propertiesでは、次のパラメータを構成します.
#redis
spring.redis.database=1 ##   
spring.redis.host=192.168.99.100
spring.redis.port=6379
spring.redis.pool.max-active=1024  ##   
spring.redis.pool.max-wait=1000 ##   
spring.redis.pool.max-idle=200 ##   

この場合、redis自体がRedisTemplateとStringRedisTemplateの2つのテンプレートを構成し、redisの操作を実現します.ここではopsForValue()を使用してオブジェクトをセットする場合、まずRedisTemplateシーケンス化オブジェクトはJDKのオブジェクトシーケンス化を使用することに注意してください.したがって、オブジェクトはSerializableを実装する必要があります(インターネット上ではjacksonをシーケンス化する方法が推奨されていますが、JDK自体のシーケンス化を使用するとバイナリ文字が得られ、効率的で高速です.)次に、opsXXX()がgetオブジェクトに来ると、RedisTemplateとStringRedisTemplateは区別され、そうでないと所望の結果が得られない.
次にキャッシュと言いますが、ここではredisを使用しているのでシステムはredisをデフォルトでキャッシュしますが、redisが別のことをしたいなら、別のキャッシュフレームワークを使うとしたらどうすればいいですか?
1.では、まずアプリケーションで.propertiesでは、次のパラメータを構成します.
#Cache
spring.cache.type=guava #         ,      guava 
spring.cache.cache-names[0]=outsourced #          
  • はpom.xmlには対応するキャッシュツール
  • を導入する必要がある.
            <dependency>
                <groupId>com.google.guavagroupId>
                <artifactId>guavaartifactId>
                <version>19.0version>
            dependency>

    3.対応キャッシュインスタンス
        @Override                                      //key       '#'   
        @Cacheable(value = "outsourced", key = "#name")//value        
        public UserInfo fineOne(String name) {
            UserInfo userInfo = userInfoRepository.findFirstByUserName("  ");
            System.out.print("   key "+name+"  ");
            return userInfo;
        }

    完了
    次の更新:
    文章の中で書くのはあまり良くなくて、JDKを使ってバイナリキャッシュをすることを推薦しないべきで、JDKが持っているシーケンス化ツールから出てきたバイナリが長すぎて、再分布式環境、特に言語にまたがる環境、Thrift、ProtobufとAvroなどのシーケンス化通信ソリューションを推薦して、彼たちは友好的に回避することができて、XMLの体積が大きすぎて、解析性能が極めて悪いです;JSONの体積は比較的に小さく、解析は比較的速いが、表現能力が弱いという特徴がある.もちろん、jsonは人にとって読みやすさがよく、jackson 2を使いたいなら使えます.xはキャッシュとして、redisTemplateでsetKeySerializer/setValueSerializer/setHashValueSerializerなどのシーケンス化方式を配置することができ、ここではGenericJackson2JsonRedisSerializer類を配置させ、具体的な配置は以下の方式を参考にすることができる
        @Resource
        private RedisProperties redisProperties;
    
        @Bean
        public JedisPoolConfig jedisPoolConfig() {
            JedisPoolConfig config = new JedisPoolConfig();
            config.setMaxIdle(10);
            config.setMaxTotal(100);
            config.setMaxWaitMillis(5000);
            config.setMinIdle(0);
            config.setTestOnBorrow(true);
            config.setTestWhileIdle(true);
            config.setNumTestsPerEvictionRun(2);
            config.setTimeBetweenEvictionRunsMillis(30000);
            config.setMinEvictableIdleTimeMillis(60000);
            config.setSoftMinEvictableIdleTimeMillis(60000);
            return config;
        }
    
        @Bean
        public RedisConnectionFactory redisConnectionFactory() {
            JedisConnectionFactory redisConnectionFactory = new JedisConnectionFactory(jedisPoolConfig());
            redisConnectionFactory.setDatabase(redisProperties.getDatabase());
            redisConnectionFactory.setHostName(redisProperties.getHost());
            redisConnectionFactory.setPort(redisProperties.getPort());
            redisConnectionFactory.setPassword(redisProperties.getPassword());
            redisConnectionFactory.setTimeout(15000);
            redisConnectionFactory.setUsePool(true);
            return redisConnectionFactory;
        }
    
        @Bean
        public  RedisTemplate redisTemplate() {
            RedisTemplate template = new RedisTemplate<>();
            template.setConnectionFactory(redisConnectionFactory());
            template.setKeySerializer(new StringRedisSerializer());
            template.setHashKeySerializer(new StringRedisSerializer());
            template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
            template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
    //        template.setEnableTransactionSupport(true);
            template.afterPropertiesSet();
            return template;
        }
    

    特に強調:Jackson 2 JsonRedisSerializerの代わりにGenericJackson 2 JsonRedisSerializerおよびJacksonJsonRedisSerializerを使用することを推奨します.GenericJackson 2 JsonRedisSerializerは汎用性を保持することができるからです.