我是 Redis 新手,我正在使用 Redis Java 客户端来处理 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();
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,它只是打开集群,使用 Redis 设置/获取,然后关闭集群。
如果代码作为服务运行(例如在Servlet中),那么它将频繁地打开和关闭集群,这会导致性能不佳。
请问如何有效使用JedisCluster?
谢谢!
我已经弄清楚了 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.
Run Code Online (Sandbox Code Playgroud)
这样,我们就可以在 Singleton 对象中保存一个 JedisCluster 实例,然后在 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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9419 次 |
| 最近记录: |