【问题标题】:Java Client to connect ElasticCache Redis Cache NodeJava Client 连接 ElasticCache Redis 缓存节点
【发布时间】:2015-09-01 21:53:26
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    总之

    视情况而定。

    说明

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

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

    低级

    高级

    ...还有更多。您可以在http://redis.io/clients#java找到更全面的 Java Redis 客户端列表

    您应该接受哪个客户?

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

    如果您想处理 Java 集合、锁等,请查看 Spring Data Redis 或 Redisson。

    您应该采用哪种 API?

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

    HTH,马克

    【讨论】:

    • 很好的答案 - 详细而公正(来自非凡的生菜客户的作者;))
    • 感谢 Mark 的详细解释。我尝试使用 Jedis,但没有找到设置 AWS 凭证的方法。有没有办法设置凭据?
    • 这是一个不同的话题。 ElastiCache 中没有可用的应用程序级安全/身份验证。您只需选择带有端口的节点地址并连接。保护缓存实例的唯一方法是选择正确的安全组设置。我没有尝试在运行时设置密码(CONFIG SET requirepass )。
    • 感谢马克的建议
    • Elasticcache 需要 TLS 连接,Jedis 仍然不支持集群模式。
    【解决方案2】:

    基本 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();
       }
    
    
    }
    

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

    RedisConnection redisConnection=new RedisConnection();
    
    ArrayList<String> dataInRedis=redisConnection.getAvailableKeys();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-09
      • 2018-02-13
      • 2020-01-07
      • 1970-01-01
      • 1970-01-01
      • 2022-08-03
      • 1970-01-01
      • 2017-08-06
      相关资源
      最近更新 更多