【发布时间】:2015-09-01 21:53:26
【问题描述】:
有没有办法通过提供节点端点连接到 Redis 缓存集群节点? 我应该使用哪个库?
另外,我应该使用哪个 API 来存储和检索缓存中的内容?
【问题讨论】:
标签: java caching amazon-web-services redis amazon-elasticache
有没有办法通过提供节点端点连接到 Redis 缓存集群节点? 我应该使用哪个库?
另外,我应该使用哪个 API 来存储和检索缓存中的内容?
【问题讨论】:
标签: java caching amazon-web-services redis amazon-elasticache
视情况而定。
您可以连接到 Redis 集群节点,而无需将命令分派到其他节点。您只需确保您访问由节点处理的密钥。如果您要连接到从站,请确保您的连接处于READONLY 模式,否则从站将响应MOVED。
有很多基于 Java 的 Redis 客户端:
低级
高级
...还有更多。您可以在http://redis.io/clients#java找到更全面的 Java Redis 客户端列表
您应该接受哪个客户?
嗯,这主要取决于您的要求。如果您需要“只是一个客户端”来进行短期连接,那么 Jedis 可能是您的正确选择。如果您需要灵活性、异步响应和自定义编解码器,那么 lettuce 可能是您的朋友。
如果您想处理 Java 集合、锁等,请查看 Spring Data Redis 或 Redisson。
您应该采用哪种 API?
还取决于您的要求。 Redis 协议可能比 memcached 协议更灵活,因为 Redis 支持更多的数据结构。
HTH,马克
【讨论】:
基本 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();
【讨论】: