我是Redis的新手,我正在使用Redis Java Client与Redis集群一起使用。
我有以下代码:
public class HelloRedisCluster {
public static void main(String[] args) {
Set<HostAndPort> nodes = new HashSet<HostAndPort>();
nodes.add(new HostAndPort("127.0.0.1", 6001));
nodes.add(new HostAndPort("127.0.0.1", 6002));
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(10000);
config.setMaxIdle(500);
JedisCluster cluster = new JedisCluster(nodes);
cluster.set("abc", "123");
System.out.println(cluster.get("abc"));
cluster.close();
}
}
在上面的代码中,它只是打开集群,使用Redis进行设置/获取,然后关闭集群。
如果代码作为服务运行(例如在Servlet中),则它将频繁打开和关闭集群,这将导致性能下降。
我会问如何有效使用JedisCluster?
谢谢!
答案 0 :(得分:0)
我已经弄清楚JedisCluster的工作方式。在内部,它已经使用了Jedis Pool。
JedisCluster提供的操作遵循相同的模式,例如set
:
1. Borrow a Jedis object from Jedis Pool
2. Call Jedis#set method
3. Release the Jedis object back to the pool.
因此,我们可以将JedisCluster实例保存在Singleton对象中,然后在JVM退出时关闭JedisCluster对象,使用以下代码:
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;
import java.util.HashSet;
import java.util.Set;
public class JedisClusterUtil {
private static JedisCluster cluster;
static {
Set<HostAndPort> nodes = new HashSet<HostAndPort>();
nodes.add(new HostAndPort("127.0.0.1", 6001));
nodes.add(new HostAndPort("127.0.0.1", 6002));
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(10000);
config.setMaxIdle(500);
cluster = new JedisCluster(nodes, config);
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
if (cluster != null) {
cluster.close();
}
}
});
}
public static JedisCluster getCluster() {
return cluster;
}
}