有没有办法通过提供Node端点连接到Redis缓存群集节点? 我应该使用哪个库?
此外,我应该使用哪个API来存储和检索缓存中的内容?
答案 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();
}
}