Java操作Redis集群

时间:2022-04-02 17:26:29

在上一篇文章《Redis集群搭建(3主3从)》中完成了Redis的集群搭建。下面说一下针对该集群的相关操作。

Java操作Redis集群

cluster info    查看集群信息

Java操作Redis集群


在该集群中

主:192.168.0.203     从:192.168.0.206

主:192.168.0.204     从:192.168.0.207

主:192.168.0.205     从:192.168.0.208

使用redis-cli登录指定的redis服务器,并使用cluster nodes命令查看集群的节点信息
./redis-cli -c -h 192.168.0.203 -p 6379
上述命令中的-c代表是集群,-h 指定redis服务器的IP地址,-p指定redis服务的端口号
cluster nodes

Java操作Redis集群

192.168.0.203机器是一个Master节点,执行set name cb 之后,切换到了192.168.0.204 并将其存到slot 5798中。此时,退出redis-cli并重新登录到192.168.0.203的Redis服务,执行keys *  发现为空。但是,执行get name
可以获取name的值,并切换到192.168.0.204 redis服务。
Java操作Redis集群

在203的从节点206上,查看name是否存在。登录到206的redis服务之后,查看到redis为空。但是,执行get name
可以获取name的值,并切换到192.168.0.204 redis服务。
redis-cli -c -h 192.168.0.206 -p 6379
Java操作Redis集群

在204的从节点207上,登录到其redis服务,查看redis不为空。可以获取name值,同样切换到了204的redis服务上
Java操作Redis集群


Redis集群中保存的数据基本会平均分配到3个不同的Master中,分别记录在不同的slot中。整个集群是作为一个整体,对外提供服务。在Java中操作Redis集群,需要关闭各个节点的防火墙。
关闭防火墙
chkconfig iptables off  
查看防火墙状态
chkconfig --list|grep iptables  
Java操作Redis集群

分别删除3个Master 203、204、205上的Redis中数据,执行指令flushall

下面代码通过Java操作上述的Redis集群
package com.cb.test;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;

public class MyRedisCluster {
public static void main(String[] args) {

Set<HostAndPort> clusterNodes = new HashSet<HostAndPort>();
clusterNodes.add(new HostAndPort("192.168.0.203", 6379));
clusterNodes.add(new HostAndPort("192.168.0.204", 6379));
clusterNodes.add(new HostAndPort("192.168.0.205", 6379));
clusterNodes.add(new HostAndPort("192.168.0.206", 6379));
clusterNodes.add(new HostAndPort("192.168.0.207", 6379));
clusterNodes.add(new HostAndPort("192.168.0.208", 6379));

JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(50);//最大连接个数
jedisPoolConfig.setMaxIdle(10);//最大空闲连接个数
jedisPoolConfig.setMaxWaitMillis(-1);//获取连接时的最大等待毫秒数,若超时则抛异常。-1代表不确定的毫秒数
jedisPoolConfig.setTestOnBorrow(true);//获取连接时检测其有效性
JedisCluster jedisCluster = new JedisCluster(clusterNodes,15000,100,
jedisPoolConfig);//第二个参数:超时时间 第三个参数:最大尝试重连次数

Map<String,String> map=new HashMap<String,String>();

jedisCluster.set("id", "1");
jedisCluster.set("name", "cb");
jedisCluster.set("age", "10");

System.out.println(jedisCluster.get("id"));
System.out.println(jedisCluster.get("name"));
System.out.println(jedisCluster.get("age"));

jedisCluster.close();//关闭jedisCluster
}
}

控制台输出:
Java操作Redis集群

查看redis集群
Java操作Redis集群

Java操作Redis集群

Java操作Redis集群

使用redis-cli 登录192.168.0.206上的redis服务,查询相关信息
Java操作Redis集群