sql >> データベース >  >> NoSQL >> Redis

SpringデータキャッシュでRedisを使用するときに分散/クラスター化キャッシュを有効にする方法

    SpringBootアプリでキャッシュを有効にするのは非常に簡単です。 3つの手順に従うだけです。

    • キャッシュ構成を定義する
    • 任意の構成クラスにEnableCachingを追加する
    • CacheManagerBeanを提供します

    Redisの場合、構成および作成できるRedisCacheManagerがあります。

    キャッシュ構成

    @Configuration
    @Getter
    @Setter
    @ConfigurationProperties(prefix = "cache")
    public class CacheConfigurationProperties {
     // Redis host name
      private String redisHost;
     // Redis port
      private int redisPort;
      // Default TTL
      private long timeoutSeconds;
      // TTL per cache, add enties for each cache
      private Map<String, Long> cacheTtls;
    }
    

    プロパティまたは

    のようなyamlファイルを介して値を設定します
    cache.redisHost=localhost
    cache.redisPort=6379
    cache.timeoutSeconds=1000
    cache.cacheTtls.cach1=100
    cache.cacheTtls.cach2=200
    

    構成を作成したら、ビルダーによってRedisCacheMangerのキャッシュ構成を作成できます。

    @Configuration
    @EnableCaching
    public class CacheConfig {
      private static RedisCacheConfiguration createCacheConfiguration(long timeoutInSeconds) {
        return RedisCacheConfiguration.defaultCacheConfig()
            .entryTtl(Duration.ofSeconds(timeoutInSeconds));
      }
    
      @Bean
      public LettuceConnectionFactory redisConnectionFactory(CacheConfigurationProperties properties) {
        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
        redisStandaloneConfiguration.setHostName(properties.getRedisHost());
        redisStandaloneConfiguration.setPort(properties.getRedisPort());
        return new LettuceConnectionFactory(redisStandaloneConfiguration);
      }
    
      @Bean
      public RedisCacheConfiguration cacheConfiguration(CacheConfigurationProperties properties) {
        return createCacheConfiguration(properties.getTimeoutSeconds());
      }
    
      @Bean
      public CacheManager cacheManager(
          RedisConnectionFactory redisConnectionFactory, CacheConfigurationProperties properties) {
        Map<String, RedisCacheConfiguration> cacheConfigurations = new HashMap<>();
    
        for (Entry<String, Long> cacheNameAndTimeout : properties.getCacheTtls().entrySet()) {
          cacheConfigurations.put(
              cacheNameAndTimeout.getKey(), createCacheConfiguration(cacheNameAndTimeout.getValue()));
        }
    
        return RedisCacheManager.builder(redisConnectionFactory)
            .cacheDefaults(cacheConfiguration(properties))
            .withInitialCacheConfigurations(cacheConfigurations)
            .build();
      }
    }
    

    Redisクラスターを使用している場合は、それに従ってキャッシュプロパティを更新します。この場合、これらのメソッドをプライベートにするよりもキャッシュ固有のBeanが必要な場合、一部のBeanがプライマリになります。




    1. Heroku Redisをワイプする方法は?

    2. Redisキーが期限切れにならないのはなぜですか?

    3. mongoグループはフィールドを保持する方法を照会します

    4. Railsアプリでmongoidを使用したMongoクエリにより、カーソルタイムアウトエラーが発生します