2017-11-15 5 views
0

AWSを開始したばかりで、SpringのRedis-jedisでAWS ElasticCacheを使用する必要があります。 春データRedisの1.8.8.RELEASE AWS-のjava-sdkの1.11.228 春4.2.9.RELEASE jedis 2.9.0アクセスElasticCache - Jedisとspring

私はコードの下で地元のRedisにデータを接続してキャッシュすることができました。私はhttps://github.com/fishercoder1534/AmazonElastiCacheExample/tree/master/src/main/javaとしてコードを変更しようとしましたが、成功しませんでした。いくつかのサンプルコードを参考にして助けてください。 AWS ElasticCacheは現在、オプション1として設定されていますが、すぐにオプション2に移動する必要があります。 1.レプリケートされていないクラスタ - レプリカなしのレディスクラスタ無効 2.レプリケートされたクラスタ - レディスクラスタ対応およびレディスクラスタが読み取りレプリカで無効になっています。 AWS弾性キャッシュ+レタス(RedisののJavaクライアント)+ばねデータのRedisとキャッシュを実装

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.beans.factory.annotation.Value; 
import org.springframework.cache.CacheManager; 
import org.springframework.cache.annotation.CachingConfigurerSupport; 
import org.springframework.cache.annotation.EnableCaching; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.context.annotation.PropertySource; 
import org.springframework.data.redis.cache.RedisCacheManager; 
import org.springframework.data.redis.connection.RedisConnectionFactory; 
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; 
import org.springframework.data.redis.core.RedisTemplate; 
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer; 
import org.springframework.data.redis.serializer.StringRedisSerializer; 
import redis.clients.jedis.Jedis; 
import org.springframework.cache.interceptor.KeyGenerator; 
import java.lang.reflect.Method; 
import java.util.List; 

@Configuration 
@EnableCaching 
// @PropertySource("classpath:/redis.properties") 
public class CacheConfig extends CachingConfigurerSupport { 
// private @Value("${redis.host}") String redisHost; 
// private @Value("${redis.port}") int redisPort; 

//@Bean 
    public KeyGenerator keyGenerator() { 
    return new KeyGenerator() { 
     @Override 
     public Object generate(Object o, Method method, Object... objects) { 
     // This will generate a unique key of the class name, the method name, and all method parameters appended. 
     StringBuilder sb = new StringBuilder(); 
     sb.append(o.getClass().getName()); 
     sb.append(method.getName()); 
     for (Object obj : objects) { 
      sb.append(obj.toString()); 
     } 
     return sb.toString(); 
     } 
    }; 
    } 


@Bean 
public JedisConnectionFactory redisConnectionFactory() { 
    JedisConnectionFactory redisConnectionFactory = new JedisConnectionFactory(); 

    // Defaults for redis running on Local Docker 
    redisConnectionFactory.setHostName("192.168.99.100"); 
    redisConnectionFactory.setPort(6379); 

    return redisConnectionFactory; 
} 

@Bean 
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory cf) { 
    RedisTemplate<String, String> redisTemplate = new RedisTemplate<String, String>(); 
    redisTemplate.setConnectionFactory(cf); 
    redisTemplate.setDefaultSerializer(new JdkSerializationRedisSerializer()); 
    return redisTemplate; 
} 

@Bean 
public CacheManager cacheManager(RedisTemplate<String, String> redisTemplate) { 
    RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate); 

    // Number of seconds before expiration. Defaults to unlimited (0) 
    cacheManager.setDefaultExpiration(1200); 
    cacheManager.getCacheNames().forEach(cacheM-> {System.out.println(cacheM);}); 
    return cacheManager; 
} 

}

答えて

1

。 2つのスレーブを持つ3つのマスターとspring @Cachableと@CacheEvictアノテーションを使用するSSL。問題が発生した場合や、より良い方法で解決できる場合は、入力してください。

Spring 4.3.12.RELEASE 
Spring-data-redis 1.8.8.RELEASE 
aws-java-sdk 1.11.228 
Lettuce (Redis java Client) 4.4.2.Final 

@Configuration 
@EnableCaching 
public class CacheConfig extends CachingConfigurerSupport { 
long expirationDate = 1200; 

static AWSCredentials credentials = null; 
static { 
    try { 
     //credentials = new ProfileCredentialsProvider("default").getCredentials(); 
     credentials = new SystemPropertiesCredentialsProvider().getCredentials(); 
    } catch (Exception e) { 
     System.out.println("Got exception.........."); 
     throw new AmazonClientException("Cannot load the credentials from the credential profiles file. " 
       + "Please make sure that your credentials file is at the correct " 
       + "location (/Users/USERNAME/.aws/credentials), and is in valid format.", e); 
    }  
} 

@Bean 
public LettuceConnectionFactory redisConnectionFactory() { 
    AmazonElastiCache elasticacheClient = AmazonElastiCacheClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(credentials)).withRegion(Regions.US_EAST_1).build(); 
    DescribeCacheClustersRequest dccRequest = new DescribeCacheClustersRequest(); 
    dccRequest.setShowCacheNodeInfo(true); 

    DescribeCacheClustersResult clusterResult = elasticacheClient.describeCacheClusters(dccRequest); 

    List<CacheCluster> cacheClusters = clusterResult.getCacheClusters(); 
    List<String> clusterNodes = new ArrayList <String>(); 
    try { 
     for (CacheCluster cacheCluster : cacheClusters) { 
      for (CacheNode cacheNode : cacheCluster.getCacheNodes()) { 
       String addr = cacheNode.getEndpoint().getAddress(); 
       int port = cacheNode.getEndpoint().getPort(); 
       String url = addr + ":" + port; 
       if(<CLUSTER NAME>.equalsIgnoreCase(cacheCluster.getReplicationGroupId())) 
        clusterNodes.add(url); 
      } 
     } 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    }  
    LettuceConnectionFactory redisConnectionFactory = new LettuceConnectionFactory(new RedisClusterConfiguration(clusterNodes)); 
    redisConnectionFactory.setUseSsl(true); 
    redisConnectionFactory.afterPropertiesSet(); 
    return redisConnectionFactory; 
} 

    @Bean 
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory cf) { 
    RedisTemplate<String, String> redisTemplate = new RedisTemplate<String, String>(); 
    redisTemplate.setConnectionFactory(cf); 
    redisTemplate.setDefaultSerializer(new JdkSerializationRedisSerializer()); 
    return redisTemplate; 
} 

@Bean 
public CacheManager cacheManager(RedisTemplate<String, String> redisTemplate) { 
    RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate); 

    // Number of seconds before expiration. Defaults to unlimited (0) 
    cacheManager.setDefaultExpiration(expirationDate); 
    cacheManager.setLoadRemoteCachesOnStartup(true); 
    return cacheManager; 
} 

}

関連する問題