Codis学习笔记--Java连接codis

连接到Codis Proxy跟连接到原生的Redis Server是一样的,只是Codis Proxy不支持部分Redis操作命令。连接Codis Proxy的Java客户端有Jedis、Jodis等,下面简单介绍一下Jedis和Jodis的用法

一、Jedis用法

Jedis是一个非常小而全的Redis Java客户端,也是官方推荐的客户端。

maven依赖:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.0.1</version>
    <type>jar</type>
    <scope>compile</scope>
</dependency>

1.不使用连接池

public class JedisTest {

    public static void main(String[] args) {
        // ip端口为codis-proxy的ip端口
        Jedis jedis = new Jedis("120.xx.xxx.xx", 19000);
        jedis.set("foo", "bar");
        String value = jedis.get("foo");
        System.out.println(value);
    }
}

2.使用连接池

public class JedisPoolTest {

    public static void main(String[] args) {

        // 连接池配置
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(50);
        config.setMaxIdle(50);
        config.setMinIdle(1);
        config.setMaxWaitMillis(30000);
        // 创建连接池,ip端口为codis-proxy的ip端口
        JedisPool jedisPool = new JedisPool(config, "120.xx.xxx.xx", 19000);
        // 从连接池中获取连接
        try (Jedis jedis = jedisPool.getResource()) {
            jedis.set("foo1", "bar1");
            String value = jedis.get("foo1");
            System.out.println(value);
        }
    }
}

 二、Jodis用法

Jodis是一个基于Jedis和Curator(zookeeper的Java客户端)的Java客户端。

特性:

1.可实时检测codis-proxy的在线和离线状态,通过监控zookeeper上的proxy注册信息实时获取当前可用的proxy列表,保证可用性。

2.采用轮询策略实现codis-proxy的负载均衡。

使用Jodis需要在codis-proxy.toml配置中配置jodis的注册信息:

codis-proxy在启动时,会将proxy节点信息注册到指定的zookeeper的jodis节点下 

maven依赖:

<dependency>
  <groupId>io.codis.jodis</groupId>
  <artifactId>jodis</artifactId>
  <version>0.5.1</version>
</dependency>
public class JodisTest {

    private static final String zkAddr = "120.79.200.63:2181";
    private static final int zkSessionTimeoutMs = 30000;
    private static final String zkProxyDir = "/jodis/codis-demo";

    public static void main(String[] args) {
        BasicConfigurator.configure();
        JedisResourcePool jedisPool = RoundRobinJedisPool.create()
                .curatorClient(zkAddr, zkSessionTimeoutMs).zkProxyDir(zkProxyDir).build();

        try (Jedis jedis = jedisPool.getResource()) {
            jedis.set("foo", "bar");
            String value = jedis.get("foo");
            System.out.println(value);
        }
    }
}

 使用Jodis时遇到的坑:

报错信息:java.net.UnknownHostException:iZwz977ogd6jecq7rowvtsZ,大概就是解析主机iZwz977ogd6jecq7rowvtsZ失败 

我就很好奇,我codis-proxy.toml配置中配置的proxy-addr地址明明是0.0.0.0:19000,为什么注册到zk中的proxy-addr变成iZwz977ogd6jecq7rowvtsZ:19000了呢?iZwz977ogd6jecq7rowvtsZ这个字符串又是什么鬼呢?

查了很久,发现iZwz977ogd6jecq7rowvtsZ竟是我的主机名,0.0.0.0被转换成了hostname。

原来,proxy bind地址的时候,如果使用的是 0.0.0.0 的时候,proxy需要让codis-config能够访问的到,所以proxy在向zk注册(或者向dashboard注册)的时候,会主动将 0.0.0.0 换成 hostname,这样 dashboard 以及 jodis才能知道proxy的真实地址。

解决办法:proxy_addr不要使用0.0.0.0,使用具体的ip

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值