多端口配置redis

1、下载并解压好redis(建议使用配置文件方式启动,如下:)

2、修改配置文件,并复制配置文件到另一个文件夹,如图两个文件夹均有对应端口的配置文件

redis 配置集群 redis怎么配置集群_配置文件

 

 配置大致如下:

redis 配置集群 redis怎么配置集群_redis 配置集群_02

3、之后启动,需要注意,我是在对应的配置文件所在目录中启动的,因为会自动在启动目录生成如下文件,为保证不出现冲突及便于理解。但网上其他人好像都在一个文件启动,具体情况待之后增加了解。

redis 配置集群 redis怎么配置集群_redis 配置集群_03

分别在各自配置文件目录下启动的命令:
/home/install/redis/src/redis-server /home/install/redis-cluster/7001/redis-cluster.conf

/home/install/redis/src/redis-server /home/install/redis-cluster/7002/redis-cluster.conf

redis集群配置

使用的是redis 3版本,故建立集群只能使用 redis-trib.rb create --replicas 1 语句,redis 5 之后有其他方式。

redis至少6个节点才能建立集群,需要在其他服务器或本服务器其他端口启动几个redis实例。

需要注意的是使用redis-trib.rb create --replicas 建立集群无法输入密码,只能提前修改配置文件把集群密码删除再启动redis实例,或者使用
config set requirepass ''"   //设置密码为空,但重启redis服务的话,已经改过的参数不会被保存,会还原到原先的配置文件的原来的参数,所以需要使用下面的语句

config rewrite  //修改之后的参数能被一直保存,再重启redis服务,参数也会是最新修改后的参数(配置文件中的该参数发生了变化)

执行如下命令即可将列出的redis单例建立集群(多主多从 cluster ,其他的待了解):

redis-trib.rb create --replicas 1 10.158.90.151:7001 10.158.90.151:7002 10.158.90.152:7001 10.158.90.152:7002 10.158.90.153:7001 10.158.90.153:7002 10.158.90.154:7001 10.158.90.154:7002 10.158.90.155:7001 10.158.90.155:7002

以如下java代码获取jedisCluster对象,即可操作redis。需要注意的是,方法中需要指定密码,但之前已经把密码置为空,运行可能出错,只能再次使用config set、config rewrite设置密码,再用该密码连接即可

public static JedisCluster getJedisCluster() {
        if (jedisCluster == null) {
            //可以设置单节点即可访问所有节点数据
            Set<HostAndPort> set = new HashSet<HostAndPort>();
            set.add(new HostAndPort("10.158.90.151", 7002));
            set.add(new HostAndPort("10.158.90.152", 7002));
            GenericObjectPoolConfig config = new GenericObjectPoolConfig();
            config.setMaxTotal(100);
            jedisCluster = new JedisCluster(set, 60000, 60000, 50, "密码", config);
        }
        return jedisCluster;
    }

命令行连接:redis-cli -c -h 10.158.90.152 -p 7001
 

java测试:

JRedisUtil service = new JRedisUtil();
        JedisCluster cluster = service.getJedisCluster();
        String key = "user"; 
        //创建map,之后作为值放进redis
        Map<String, String> map = new HashMap<>();
        map.put("v1", "张三");
        map.put("v2", "男");
        map.put("v3", "20");
        cluster.hmset(key,map);
        //创建数组,之后以数组方式取数据
        String[] a = {"v1","v2"};
        //hmget方法经实践确定作用是取出该key对应的值中map的对应数组的值为键的对应值
        List<String> user = cluster.hmget("user", a);
        System.out.println(user);

结果如下:        

[张三, 男]

存入的map有三个键值对,但使用hmget,可以根据传入的数组,取出数组内对应键的值。