多端口配置redis
1、下载并解压好redis(建议使用配置文件方式启动,如下:)
2、修改配置文件,并复制配置文件到另一个文件夹,如图两个文件夹均有对应端口的配置文件
配置大致如下:
3、之后启动,需要注意,我是在对应的配置文件所在目录中启动的,因为会自动在启动目录生成如下文件,为保证不出现冲突及便于理解。但网上其他人好像都在一个文件启动,具体情况待之后增加了解。
分别在各自配置文件目录下启动的命令:
/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,可以根据传入的数组,取出数组内对应键的值。