01.redis扩容
由于redis的容量也是有限的,所以,就会有扩容的操作。也就好像内存中扩容一样。redis有分片这种说法,具体实现操作如下:
第一步:首先在/usr/local/src中去找到redis文件夹。cd /usr/local/src 而后进入redis文件夹。使用的linux命令是 cd redis 。
第二步:
01.使用查看当前redis进程的命令ps -ef|grep redis,
ps 命令的作用是显示进程信息的;| 符号,是个管道符号,表示ps 和 grep 命令同时执行;ps命令有一些参数:
-e : 显示所有进程
-f : 全格式
-h : 不显示标题
-l : 长格式
-w : 宽输出
a :显示终端上的所有进程,包括其他用户的进程。
r :只显示正在运行的进程。
u :以用户为主的格式来显示程序状况。
x :显示所有程序,不以终端机来区分。
grep 命令是查找,能使用正则表达式搜索文本,然后把匹配的行显示出来;
02.并且关闭redis服务。使用命令redis-cli -p 6379 shoudown,6379是redis服务运行在Linux上的端口号
第三步:搭建redis分片(这里的redis分片由三台redis服务器组成,端口号分别是6379,6380,6381)为了方便管理redis分片,在redis目录下创建一个新的文件夹shards,这个文件名shads和在springboot项目中使用redis分片对象的类名差不多。
第四步:将redis的conf文件复制三份,文件名 分别是6379.conf,6380.conf,6381.conf
使用的linux命令是:cp 文件名 复制后新的文件
查看相关文件
cd shard
ls
第五步:修改复制后文件的端口号,三个端口号表示这是三个redis服务器
分别修改6380.conf,6381.conf文件中的端口号,修改成6380,6381
vim 6380.conf
第92行修改redis的端口号
第六步:修改完成配置文件之后,去启动redis分片
启动redis服务的命令是 redis-server 端口号.conf
第七步:启动之后去检查是否启动成功
先是检查redis的相关服务
再去启动redis的客户端(先启动了redis服务后,在打开客户端)
redis-cli -p 端口号.conf
在这里使用哨兵的时候,需要设定主从机,主机用来直接存储数据,从机用来同步保存主机的数据,主从机数据一致。
设计主从机使用linux命令:
slaveof ip port :使当前服务器临时成为某个实例的从服务器(重启Redis服务器后会失效)
步骤:
在相关的redis-server 启动后,打开redis-cli 客户端界面
info replication 查看redis服务器是主机还是从机,如果想要本机变成某个主机的从机,slaveof ip port :使当前服务器临时成为某个实例的从服务器(重启Redis服务器后会失效)
Redis入门案例
@SpringBootTest
public class TestRedisShards {
/**
* 由java程序远程操作redis分片,redis分片目的为了进行redis内存的扩容
* 组成redis分片的3台redis服务器存储的数据是不一样的,每个数据只能去选择一台redis进行数
据的存储
*/
@Test
public void test() {
List<JedisShardInfo> shards=new ArrayList<JedisShardInfo>();
shards.add(new JedisShardInfo("192.168.126.129", 6379));
shards.add(new JedisShardInfo("192.168.126.129", 6380));
shards.add(new JedisShardInfo("192.168.126.129", 6381));
ShardedJedis jedis=new ShardedJedis(shards);
jedis.set("shards", "hello~shards");
System.out.println(jedis.get("shards"));
}
}
SpringBoot整合Redis分片
1编辑redis.properties配置文件
#配置redis分片
redis.shards=192.168.126.129:6379,192.168.126.129:6380,192.168.126.129:6381
2编辑RedisConfig配置类
@Configuration
//执行代码的主体是jt-manage项目
@PropertySource("classpath:/properties/redis.properties")
public class RedisConfig {
@Value("${redis.shards}")
private String nodes;//node,node,node
//spring整合redis分片机制
@Bean
public ShardedJedis shardedJedis() {
List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
String[] nodeArray = nodes.split(",");
for (String node : nodeArray) {//host:port
String host = node.split(":")[0];
int port=Integer.parseInt(node.split(":")[1]);
JedisShardInfo info =new JedisShardInfo(host, port);
shards.add(info);
}
return new ShardedJedis(shards);
}
}
3修改RedisAOP
说明:注入redis分片
缺点:
1.由于redis分片机制中的每台redis服务器存储的数据都不一致,而且没有实现高可用(故障自动迁移),所以最终很有可能造成一部分数据丢失。
2.组成redis分片机制中的任意一台redis如果宕机,会导致整个Redis分片崩溃。
02.预备redis宕机的哨兵处理
第一步:复制哨兵的配置文件sentinel.conf文件到sentinel目录中。
第二步:编辑sentinel.conf。
关闭保护模式:
开启后台启动:
第三步:配置哨兵监听(sentinel.conf)
说明:哨兵所监听的主机ip(192.168.126.129) 端口号(6379) 以及票数(1)
第四步:修改哨兵选举主机的时间 10s
第五步:修改选举失败的超时时间 20s
第六步:退出编辑模式,保存退出。
linux命令 按esc
后使用:wq
第七步:启动redis哨兵
redis的哨兵入门案例
@SpringBootTest
public class TestRedisSentinel {
/**
*masterName:主机的变量名称mymaster
*sentinels:哨兵的集合
*/
@Test
public void test() {
Set<String> sentinels=new HashSet<>();
sentinels.add("192.168.126.129:26379");//IP:port
JedisSentinelPool pool=new JedisSentinelPool("mymaster", sentinels);
Jedis jedis = pool.getResource();
jedis.set("redisSerntinel", "HelloSentinel");
System.out.println(jedis.get("redisSerntinel"));
}
}
SpringBoot整合redis哨兵
01.编辑redis.properties配置文件
#配置redis哨兵
redis.sentinel=192.168.126.129:26379
端口号是26379
02.编辑RedisConfig.java文件
@Configuration
@PropertySource("classpath:/properties/redis.properties")
public class RedisConfig {
@Value("${redis.sentinel}")
private String sentinel;
/**
* 核心思想:
* 1.动态的创建redis 哨兵的池对象
* 2.动态的从池中去jedis对象,实现数据的存储
*/
@Bean
public JedisSentinelPool jedisSentinelPool() {
Set<String> sentinels=new HashSet<>();
sentinels.add(sentinel);//一台哨兵
return new JedisSentinelPool("mymaster", sentinels);
}
@Bean
public Jedis jedis(JedisSentinelPool jedisSentinelPool) {
return jedisSentinelPool.getResource();
}
}
03.编辑RedisAOP.java
1.Redis哨兵机制中没有实现redis内存的扩容。
2.如果redis哨兵宕机会导致,整个Redis哨兵机制崩溃。
Redis集群
第一步:将所有的redis服务都停掉
第二步:为了集群,所以在redis目录中创建cluster目录
第三步:进入cluster目录中,创建6个目录,分别为7000,7001,7002,7003,7004,7005
第四步:将redis目录下的redis.conf文件去到cluster目录下的7000目录复制一份。
第五步:编辑7000目录中的配置文件
1.注释本地绑定ip注释掉:
2.关闭保护模
3.修改端口号
4.开启后台启动
5.修改pid文件路径
6.修改持久化文件路径
7.关闭aof持久化策略
8.开启集群配置
9.开启集群配置文件
10.设置集群超时时间,也就是当服务器连接不同时,过15s之后就开启高可用11.退出编辑模式,保存退出
12.复制在7000目录中已经修改过的redis.conf文件到7001,7002,7003,7004,7005
13.分别对7001,7002,7003,7004,7005目录里面的redis.conf文件进行批量修改,批量修改的命令为:
14.进入cluster目录中,在cluster目录中创建一个启动脚本文件,命令为:vim start.sh,具体脚本中内容为:编辑完成之后保存退出
15.编辑关闭服务脚本文件,在cluster目录中先创建并编辑关闭脚本,命令为:vim stop.sh,脚本的内容
启动redis集群的节点,命令为
集群搭建,命令为:
redis-cli --cluster create --cluster-replicas 1 192.168.126.129:7000
192.168.126.129:7001 192.168.126.129:7002 192.168.126.129:7003
192.168.126.129:7004 192.168.126.129:7005
然后输入yes!
集群搭建成功!
slots:表示如果数据的key经过 hash函数后,取值落在slots表明的区间中的时候,存入相关的slots属于的redis服务器主机(master)。
redis集群入门案例
@SpringBootTest
public class TestRedisCluster {
@Test
public void test() {
Set<HostAndPort> nodes=new HashSet<>();
nodes.add(new HostAndPort("192.168.126.129", 7000));
nodes.add(new HostAndPort("192.168.126.129", 7001));
nodes.add(new HostAndPort("192.168.126.129", 7002));
nodes.add(new HostAndPort("192.168.126.129", 7003));
nodes.add(new HostAndPort("192.168.126.129", 7004));
nodes.add(new HostAndPort("192.168.126.129", 7005));
JedisCluster jedisCluster=new JedisCluster(nodes);
jedisCluster.set("cluster", "redisCluster~");
System.out.println(jedisCluster.get("cluster"));
}
}
SpringBoot整合Redis集群
第一步:编辑redis.properties文件
#配置redis集群
redis.cluster=192.168.126.129:7000,192.168.126.129:7001,192.168.126.129:7002,192
.168.126.129:7003,192.168.126.129:7004,192.168.126.129:7005
第二步:编辑RedisConfig.java文件文章来源:https://www.toymoban.com/news/detail-450332.html
@Configuration
@PropertySource("classpath:/properties/redis.properties")
public class RedisConfig {
@Value("${redis.cluster}")
private String nodes;//node,node,node,node,node,node
/**
* 配置redis集群
* 操作集群的工具API对象:JedisCluster
*/
@Bean
public JedisCluster jedisCluster() {
Set<HostAndPort> setNodes=new HashSet<>();
String[] arrayNodes = nodes.split(",");
for (String node : arrayNodes) {//node=ip:port
String host=node.split(":")[0];
int port=Integer.parseInt(node.split(":")[1]);
HostAndPort hostAndPort=new HostAndPort(host, port);
setNodes.add(hostAndPort);
}
return new JedisCluster(setNodes);
}
}
第三步:修改RedisAOP文章来源地址https://www.toymoban.com/news/detail-450332.html
到了这里,关于分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!