先把代码贴上来
import io.codis.jodis.JedisResourcePool;
import io.codis.jodis.RoundRobinJedisPool;
import redis.clients.jedis.Jedis;
/**
* @author wujiang
* @version 1.0.0
* @date 2017/7/12
*/
public class CodisDemo {
public static void main(String[] args) {
JedisResourcePool jedisPool = RoundRobinJedisPool.create()
.curatorClient("10.0.2.15:2181", 30000).zkProxyDir("/jodis/codis-wujiang").build();
try (Jedis jedis = jedisPool.getResource()) {
//省略代码
}
}
}
运行上面的代码时,一直报错
Redis.clients.jedis.exceptions.JedisException: Proxy list empty
目前已经解决,因为每个人报这个错误的原因不同,这里列出可能的原因,如果遇到了可以逐一排查一下:
1 检查proxy是否已经成功的添加到集群中,在zk中就可以查看。/jodis/codis-productName路径下,看是否有对应的proxy。
2 proxy.conf中,jodis_addr有没有正确填写,如下所示
jodis_name = "zookeeper"
jodis_addr = "10.0.2.15:2181"
3 jodis在maven仓库中有两个,一个是io.codis.jodis,一个是com.wandouLabs.jodis,一定要用第一个
4 我当时的codis.json文件是用命令自动生成的,里面的内容如下:
[
{
"name": "codis-wujiang",
"dashboard": "cnsz22vla888.novalocal:18080"
}
]
后来发现添加到页面的proxy是novalocal:19000,而不是ip地址。fe是通过dashboard去找proxy的,如果dashboard都找不到,肯定更找不到proxy了。后来我把codis.json等配置文件中的参数改成明确的ip,直到页面上添加成功的proxy变成如下所示的ip地址,而不是novalocal。这个cnsz22vla888.novalocal就是操作系统的主机名称,看一看Codis源码解析——proxy的启动中的proxy-token信息就知道
5 所有Slot都要分配到某个group。如果有的slot没有得到分配,会报另一个错误
如果以上五个点检查过都没有问题,那你的jodis应该是可以正常运行了
说明
如有转载,请注明出处
http://blog.csdn.net/antony9118/article/details/76505481