用于连接ElasticCache Redis缓存节点的Java客户端

时间:2015-06-16 21:21:09

标签: java caching amazon-web-services redis amazon-elasticache

有没有办法通过提供Node端点连接到Redis缓存群集节点? 我应该使用哪个库?

此外,我应该使用哪个API来存储和检索缓存中的内容?

2 个答案:

答案 0 :(得分:8)

简而言之

取决于。

解释

您可以连接到Redis群集节点,而无需将命令分派给其他节点。您应该确保访问由节点处理的密钥。如果您要连接到从属设备,请确保您的连接处于READONLY模式,否则从属设备将使用MOVED进行响应。

有很多基于Java的Redis客户端:

低级别

高级

......还有更多。您可以在http://redis.io/clients#java

找到更全面的Java Redis客户端列表

您应该选择哪个客户?

嗯,这主要取决于您的要求。如果你需要“只是一个客户”来进行短暂的连接,那么也许Jedis是你的正确选择。如果您需要灵活性,异步响应和自定义编解码器,那么生菜可能是您的朋友。

如果您想处理Java Collections,Locks等等,请查看Spring Data Redis或Redisson。

您应该选择哪种API?

还取决于您的要求。 Redis协议可能比memcached协议更灵活,因为Redis支持更多的数据结构。

HTH,马克

答案 1 :(得分:-1)

Basic Redis命令类:

           azureURL = new java.net.URL(url);

        con = (HttpsURLConnection)azureURL.openConnection();
        con.disconnect();
        con.setDoOutput(true);
        con.setDoInput(true);
        con.setUseCaches(false);
        con.setSSLSocketFactory(MyUtils.getSSLSocketFactory());
        con.setRequestMethod("GET");
        con.setRequestProperty("x-ms-version", "2015-06-01-preview");
        con.setRequestProperty("Content-Type", "application/json");

        String token = getAccessTokenFromServicePrincipalCredentials();
        if (token != null) {
            con.setRequestProperty("Authorization", "Bearer " + token);
            con.connect();
            in = (InputStream)con.getContent();
            InputStreamReader inr = new InputStreamReader(in);
        } else {
            logger.warn("unable to obtain prices");
        }

调用方法(从redis获取数据)

import java.util.Set;
import java.util.ArrayList;
import redis.clients.jedis.Jedis;

public class RedisConnection
{
   private Jedis jedis;
   private String hostNameIp;

   public RedisConnection()
   {
      //Set hostNameIp using properties file/directly(shown below):

      this.hostNameIp="HOSTNAME_IP";
      this.jedis=new Jedis(hostNameIp);
      this.jedis=getConnection(hostNameIp);
   }

   private Jedis getConnection(String hostNameIp)
   {
      jedis.connect();

      return jedis;
   }

   public ArrayList<String> getAvailableKeys()
   {
      Set<String> dataFromRedis=jedis.keys("*");
      ArrayList<String> dataFromRedisAsArrayList=new ArrayList<String>(dataFromRedis);
      jedis.close();

      return dataFromRedisAsArrayList;
   }

   public String getValueByName(String keyName)
   {
      String valueOfKey=jedis.get(keyName);

      jedis.close();

      return valueOfKey;
   }

   public void flushAvailableKeys()
   {
      jedis.flushAll();
      jedis.close();
   }


}