Redis-集群
一、简介
- 无中心化集群。
- Redis集群实现了对Redis的水平扩容,即启动N个redis节点,将整个数据库分布存储在这N个节点中,每个节点存储总数据的 1 / N
- Redis集群通过分区来提供一定程度的可用性;即使集群中有一部分节点失效或者无法进行通讯,集群也可以继续处理命令请求。
二、集群搭建
1. 启动6台服务器
- 搭建3主3从的服务器。
- 创建6份配置文件
include /myredis/redis.conf
pidfile "/var/run/redis_6379.pid"
port 6379
dbfilename "dump6379.rdb"
# 开启集群
cluster-enabled yes
# 设置当前节点配置文件名
cluster-config-file nodes-6379.conf
# 设置超时时长
cluster-node-timeout 15000
- 如图
- 启动6个redis服务
2. 将6个节点合成一个集群
- 进入 redis的安装目录
- 运行下面语句
redis-cli --cluster create --cluster-replicas 1 192.168.227.131:6379 192.168.227.131:6380 192.168.227.131:6381 192.168.227.131:6389 192.168.227.131:6390 192.168.227.131:6391
- 输入yes 回车
- 复制最后一行的值
[OK] All 16384 slots covered.
3. 测试连接
- 连接
- 查看集群信息-cluster nodes
三、集群操作和故障恢复
1. 集群操作
-
分配原则尽量保证每个主数据库运行在不同的IP地址,每个从库和主库不在一个IP地址上。
-
16384的含义
redis集群16384个插槽 第一个主服务器 0——5460 第二个主服务器 5461——10922 第三个主服务器 10923——16383
- 添加单个数据 - k1 v1 计算插槽 切换数据库
- 添加多个数据-失败,无法计算插槽值
- 添加多个数据-分组的概念
- 计算key的插槽值
- 计算插槽中有几个key-只能看自己插槽中的值
cluster countkeysinslot 12706
- 返回插槽中键的数量
2. 故障恢复
-
关闭一个主服务器
-
查看集群状态-6391成为主机
-
再次启动6379服务器
-
再次查看6379变为从机
四、集群的Jedis开发
- 引入相关依赖
<!-- redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--spring2.X集成redis所需common-pool2-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
- 测试类
public static void main(String[] args) {
// 创建对象
HostAndPort hostAndPort = new HostAndPort("192.168.227.131", 6379);
JedisCluster jedisCluster = new JedisCluster(hostAndPort);
// 进行操作
jedisCluster.set("b1","value1");
String b1 = jedisCluster.get("b1");
System.out.println(b1);
jedisCluster.close();
}
- 测试结果
五、Redis集群的优缺点
- 实现扩容、分摊压力、无中心配置相对简单。
- 多建操作不被支持。
- 多建的Redis事务不被支持,lua脚本不被支持。