12

Jedis-java连接redis的客户端-redis单节点,哨兵和集群模式

 3 years ago
source link: https://www.okayjam.com/jedis-java%e8%bf%9e%e6%8e%a5redis%e7%9a%84%e5%ae%a2%e6%88%b7%e7%ab%af-redis%e5%8d%95%e8%8a%82%e7%82%b9%ef%bc%8c%e5%93%a8%e5%85%b5%e5%92%8c%e9%9b%86%e7%be%a4%e6%a8%a1%e5%bc%8f/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Jedis-java连接redis的客户端-redis单节点,哨兵和集群模式

Java客户端比较常用的是JedisRedissonlettuce。Jedis是Redis官方推荐的Java连接开发工具。

优点: 

  • Jedis:比较全面的提供了Redis的操作特性  
  • Redisson:促使使用者对Redis的关注分离,提供很多分布式相关操作服务,例如,分布式锁,分布式集合,可通过Redis支持延迟队列  
  • Lettuce:主要在一些分布式缓存框架上使用比较多

可伸缩:

  • Jedis:使用阻塞的I/O,且其方法调用都是同步的,程序流需要等到sockets处理完I/O才能执行,不支持异步。Jedis客户端实例不是线程安全的,所以需要通过连接池来使用Jedis。
  • Redisson:基于Netty框架的事件驱动的通信层,其方法调用是异步的。Redisson的API是线程安全的,所以可以操作单个Redisson连接来完成各种操作
  • Lettuce:基于Netty框架的事件驱动的通信层,其方法调用是异步的。Lettuce的API是线程安全的,所以可以操作单个Lettuce连接来完成各种操作 

pom 引入Jedis依赖

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.1.0</version>
</dependency>

单主机连接模式

public static void  testRedis() {
    String host = "127.0.0.1";
    int port = 6379;
    //连接 Redis 服务
    Jedis jedis = new Jedis(host, port);
    // jedis.auth(password);
    System.out.println("连接成功");
    //设置 redis 字符串数据
    jedis.set("okayjam", "www.okayjam.com");
    // 获取存储的数据并输出
    System.out.println("redis 存储的字符串为: "+ jedis.get("okayjam"));
    jedis.close();
}

Jedis连接池是基于apache-commons pool2实现的。

public static void  testRedisPool() {
    String host = "192.168.242.128";
    int port = 6379;
    JedisPoolConfig config = new JedisPoolConfig();
    config.setMaxIdle(8);
    config.setMaxTotal(18);
    //连接 Redis 服务
    JedisPool pool = new JedisPool(config, host, port, 2000);
    //  JedisPool pool = new JedisPool(config, host, port, 2000,"password");
    Jedis jedis = pool.getResource();
    //设置 redis 字符串数据
    jedis.set("okayjam", "www.okayjam.com");
    // 获取存储的数据并输出
    System.out.println("redis 存储的字符串为: "+ jedis.get("okayjam"));
    // 需要关闭把连接释放回连接池
    jedis.close();
}

哨兵模式,连接的时候会通过哨兵寻找主节点,找到之后会连接主节点,而且在主节点宕机之后也可以通过监控重新连接新的主节点,这个过程是客户端就已经我们做的事情,我们也不需要关注哪个节点是主节点。

public static void testSentinel() {
    String masterName = "mymaster";
    String password = "";
    // 设置参数
    JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
    jedisPoolConfig.setMaxTotal(10);
    jedisPoolConfig.setMaxIdle(5);
    jedisPoolConfig.setMinIdle(5);
    // 哨兵信息,注意填写哨兵的地址
    Set<String> sentinels = new HashSet<>(Arrays.asList("192.168.242.128:28021","192.168.242.128:28022","192.168.242.128:28023"));
    // 创建连接池
    JedisSentinelPool pool = new JedisSentinelPool(masterName, sentinels, jedisPoolConfig);
    //JedisSentinelPool pool = new JedisSentinelPool(masterName, sentinels,jedisPoolConfig, password);
    // 获取客户端
    Jedis jedis = pool.getResource();
    // 执行两个命令
    jedis.set("okayjam", "www.okayjam.com");
    String value = jedis.get("okayjam");
    System.out.println(value);
}

集群中可以直接连接任意一个主节点,如果发现数据不在当前节点,会发出moved命令定位到数据所在的节点。

public static void testCluster() {
    // 配置参数,根据服务器情况设置连接参数
    JedisPoolConfig config = new JedisPoolConfig();
    config.setMaxIdle(100);
    // 添加集群master地址
    Set<HostAndPort> jedisClusterSet = new HashSet<>();
    jedisClusterSet.add(new HostAndPort("192.168.242.128", 8201));
    jedisClusterSet.add(new HostAndPort("192.168.242.128", 8202));
    jedisClusterSet.add(new HostAndPort("192.168.242.128", 8203));
    // 连接集群
    JedisCluster jedisCluster = new JedisCluster(jedisClusterSet, config);
    // r如果带密码
    //JedisCluster jedisCluster  = new JedisCluster(jedisClusterSet,1000, 1000, 5, password, config);
    // 设置key
    jedisCluster.set("okayjam", "www.okayjam.com");
    // 读取key
    System.out.println(jedisCluster.get("okayjam"));
}

上面是三种方式连接redis,通常我们会把建立连接池的操作封装成工厂方法,复用连接。而且一些配置信息也会写到配置文件,方便修改,降低耦合。

欢迎关注我的公众号

只说一点点点点

此项目被张贴在JAVA大数据技术和标记javajedisredis技术缓存 。书签的 permalink

发表评论 取消回复

电子邮件地址不会被公开。 必填项已用*标注

评论

姓名 *

电子邮件 *

站点

在此浏览器中保存我的名字、电邮和网站。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK