package com.fr.plugin.db.redis.core.accessor.category; import com.fanruan.api.log.LogKit; import com.fr.plugin.db.redis.core.accessor.EmbedRedis; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisCluster; import redis.clients.jedis.JedisPool; import redis.clients.jedis.Tuple; import java.io.IOException; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeSet; /** * @author richie * @version 10.0 * Created by richie on 2019-09-18 */ public class ClusterRedisClient implements EmbedRedis { private JedisCluster jedisCluster; public ClusterRedisClient(JedisCluster jedisCluster) { this.jedisCluster = jedisCluster; } @Override public Set keys(String pattern) { TreeSet keys = new TreeSet(); Map clusterNodes = jedisCluster.getClusterNodes(); for (String k : clusterNodes.keySet()) { JedisPool jp = clusterNodes.get(k); Jedis connection = jp.getResource(); try { keys.addAll(connection.keys(pattern)); } catch (Exception e) { LogKit.error(e.getMessage(), e); } finally { connection.close(); } } return keys; } @Override public String get(String key) { return jedisCluster.get(key); } @Override public String hget(String key, String field) { return jedisCluster.hget(key, field); } @Override public List hmget(String key, String... fields) { return jedisCluster.hmget(key, fields); } @Override public Map hgetAll(String key) { return jedisCluster.hgetAll(key); } @Override public Set hkeys(String key) { return jedisCluster.hkeys(key); } @Override public List lrange(String key, long start, long end) { return jedisCluster.lrange(key, start, end); } @Override public List mget(String... keys) { return jedisCluster.mget(keys); } @Override public Set smembers(String key) { return jedisCluster.smembers(key); } @Override public Set zrangeWithScores(String key, long start, long end) { return jedisCluster.zrangeWithScores(key, start, end); } @Override public void select(int index) { Map clusterNodes = jedisCluster.getClusterNodes(); for (Map.Entry entry : clusterNodes.entrySet()) { entry.getValue().getResource().select(index); } } @Override public String ping() { Map clusterNodes = jedisCluster.getClusterNodes(); for (String k : clusterNodes.keySet()) { JedisPool jp = clusterNodes.get(k); Jedis connection = jp.getResource(); try { return connection.ping(); } catch (Exception e) { LogKit.error(e.getMessage(), e); } finally { connection.close(); } } return null; } @Override public void close() throws IOException { jedisCluster.close(); } }