八. 集群(Cluster)
前提:已经安装好redis单机版。
当集群中超过或等于1/2节点不可用时,整个集群不可用。为了搭建稳定集群,都采用奇数节点。
1 .复制redis配置文件
从/usr/local/redis/bin下把redis.conf复制到当前目录中,命名为redis-7001.conf
# cp /usr/local/redis/bin/redis.conf /usr/local/redis/bin/redis-7001.conf
2. 修改redis-7001.conf
# cd /usr/local/redis/bin
# vim redis-7001.conf
需要修改如下
port 7001
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 15000
# appendonly yes 如果开启aof默认,需要修改为yes。如果使用rdb,此处不需要修改
daemonize yes
protected-mode no
pidfile /var/run/redis_7001.pid
3 .复制配置文件,并修改内容
把redis-7001.conf 复制5份,分别叫做redis-7002.conf、redis-7003.conf、redis-7004.conf、redis-7005.conf、redis-7006.conf
# cp redis-7001.conf redis-7002.conf
# cp redis-7001.conf redis-7003.conf
# cp redis-7001.conf redis-7004.conf
# cp redis-7001.conf redis-7005.conf
# cp redis-7001.conf redis-7006.conf
新复制的5个配置文件都需要需改三处。
例如nodes-7002.conf中需要把所有7001都换成7002。
可以使用 :%s/7001/7002/g 进行全局修改。
port 7002
cluster-config-file nodes-7002.conf
pidfile /var/run/redis_7002.pid
4 .启动6个redis
可以使用redis-server结合6个配置文件进行启动6个实例。
执行之前一定要先删除dump.rdb
# rm -f dump.rdb
# vim startup.sh./redis-server redis-7001.conf
./redis-server redis-7002.conf
./redis-server redis-7003.conf
./redis-server redis-7004.conf
./redis-server redis-7005.conf
./redis-server redis-7006.conf
# chmod a+x startup.sh
# ./startup.sh
5. 查看启动状态
6. 建立集群
在redis3的时候需要借助ruby脚本实现集群。在redis5中可以使用自带的redis-cli实现集群功能,比redis3的时候更加方便了。
建议配置静态ip,ip改变集群失效
./redis-cli --cluster create 192.168.93.10:7001 192.168.93.10:7002 192.168.93.10:7003 192.168.93.10:7004 192.168.93.10:7005 192.168.93.10:7006 --cluster-replicas 1
7. 测试
集群测试时,千万不要忘记最后一个-c参数。
# ./redis-cli -p 7001 -c
# set age 18
8 .编写关闭脚本
# vim stop.sh
# chmod a+x stop.sh./redis-cli -p 7001 shutdown
./redis-cli -p 7002 shutdown
./redis-cli -p 7003 shutdown
./redis-cli -p 7004 shutdown
./redis-cli -p 7005 shutdown
./redis-cli -p 7006 shutdown
九. Jedis
Redis给Java语言提供了客户端API,称之为Jedis。
Jedis API和Redis 命令几乎是一样的。
例如:Redis对String值新增时set命令,Jedis中也是set方法。所以本课程中没有重点把所有方法进行演示,重要演示Jedis如何使用。
Jedis API特别简单,基本上都是创建对象调用方法即可。
1. 单机版
public void testStandalone(){
Jedis jedis = new Jedis("192.168.93.10",6379);
jedis.set("name","msb-standalone");
String value = jedis.get("name");
System.out.println(value);
}
2. 带有连接池
public void testPool(){
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(20);
jedisPoolConfig.setMaxIdle(5);
jedisPoolConfig.setMinIdle(3);
JedisPool jedisPool = new JedisPool(jedisPoolConfig,"192.168.93.10",6379);
Jedis jedis = jedisPool.getResource();
jedis.set("name","msb-pool");
String value = jedis.get("name");
System.out.println(value);
}
3. **集群**
public void testCluster(){
Set<HostAndPort> set = new HashSet<>();
set.add(new HostAndPort("192.168.93.10",7001));
set.add(new HostAndPort("192.168.93.10",7002));
set.add(new HostAndPort("192.168.93.10",7003));
set.add(new HostAndPort("192.168.93.10",7004));
set.add(new HostAndPort("192.168.93.10",7005));
set.add(new HostAndPort("192.168.93.10",7006));
JedisCluster jedisCluster = new JedisCluster(set);
jedisCluster.set("name","bjmsb");
String value = jedisCluster.get("name");
System.out.println(value);
}