个人学习笔记之Linux搭建Redis(从单台至集群)

指令总结
cd / 返回根目录
cd ~ 用户主目录
cd . 当前目录
cd … 返回到上一级目录
cd /usr/ 进入到usr目录
cd – 返回上一个目录
cd 初始化
ps ef|grep redis(查看当前Redis运行状态)
mv redis-5.0.5 redis(mv 需要修改的文件名 修改后的文件名)
vim redis.conf(查看配置文件)
redis-server redis.conf(启动redis配置文件)
redis-cli -p 6379(进入6379端口号)
redis-cli -p 6379(shutdown 关闭客户端 )
ctrl+c/exit/quit(退出客户端)
mkdir shards(创建shards文件夹)
cp redis.conf shards/6379.confcp (cp 待复制的文件 复制到目录/更改文件名字)
redis-server xxx.conf(启动配置文件)
slaveof 192.168.52.129 6380(slaveof 主机IP 主机端口号 修改redis服务器主从关系)
redis-cli -p 端口号(查看当前redis端口状态)
info replication(查看当前端口状态)

SpringBoot配置Redis

目录

  • SpringBoot配置Redis
    • 搭建测试redis单台
    • 搭建测试redis分片
    • 搭建测试redis哨兵
    • 搭建测试redis集群
    • 自问自答
      • 什么是redis?
      • 为什么创建redis集群而不是单台?
      • 什么是高可用性?
      • redis集群的原理是什么?

Redis下载

http://www.redis.cn/download.html

个人学习笔记之Linux搭建Redis(从单台至集群)_第1张图片
Redis安装
Linux命令
利用cd命令符进入存放压缩包的目录

cd / 返回根目录
cd ~ 用户主目录
cd . 当前目录
cd … 返回到上一级目录
cd /usr/ 进入到usr目录
cd – 返回上一个目录
cd 初始化

在linux环境下解压压缩包

//解压压缩包中的文件到当前目录
tar -xvf redis-5.0.5.tar.gz

注:-xvf
-c 创建一个新的tar文件
-v 显示运行过程的信息
-f 指定文件名
-z 调用gzip压缩命令进行压缩
-t 查看压缩文件的内容
-x 解开tar文件

修改文件名

//mv 需要修改的文件名 修改后的文件名
mv redis-5.0.5 redis

利用cd redis进入到当前redis文件目录
再执行Linux安装命令

make install

效果图

搭建测试redis单台

1、修改Redis配置文件(普通方法)
使用WinSCP工具在当前redis目录下打开redis.conf
个人学习笔记之Linux搭建Redis(从单台至集群)_第2张图片
修改IP绑定

关闭保护模式

个人学习笔记之Linux搭建Redis(从单台至集群)_第3张图片
开启后台启动
个人学习笔记之Linux搭建Redis(从单台至集群)_第4张图片
2、修改Redis配置文件(命令符方法)
进入配置文件

vim redis.conf

全文查询

:/port

文本默认查看模式
点击键盘上DEL键,进入删除操作
点击键盘上I键,进入新增操作
操作结束后 按ESC退出操作模式

保存并退出

:wq

3、启动Redis
在当前目录启动redis

redis-server redis.conf

效果图

查看当前Redis运行状态

ps ef|grep redis

进入客户端

进入客户端才对redis内部数据进行增删改操作

//6379为redis默认端口号,可以省略不写
redis-cli -p 6379

退出客户端

 ctrl+c/exit/quit

关闭客户端

redis-cli -p 6379 shutdown

若当前操作的redis默认端口号为6379,则端口号可以省略不写。

4、SpringBoot配置redis
1、导入jar包

<dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.data</groupId>
	<artifactId>spring-data-redis</artifactId>
</dependency>

2、修改SpringBoot启动配置类

填写虚拟机IP地址
个人学习笔记之Linux搭建Redis(从单台至集群)_第5张图片
windows+R–>cmd–>ipconfig
若没有创建虚拟机,则不会出现VMnet8。
个人学习笔记之Linux搭建Redis(从单台至集群)_第6张图片

3、测试redis是否配置成功

	public static void main(String[] args) {
		//new一个Jedis的有参构造
		Jedis jedis = new Jedis("192.168.52.129", 6379);
		//创建K-V值{"1908":"ABB"}
		jedis.set("1908","ABB");
		//根据Key值获取Value值
		System.out.println(jedis.get("1908"));
	}``
输出结果
```java
ABB

若报错,可能是
1.关闭防火墙命令 service iptables stop
service iptables status 查看当前防火墙是否运行
2.redis-server redis.conf(默认启动 权限不正确,修改用户权限)
3.检查redis.conf配置文件的三处(ip绑定、保护模式关闭、后台启动开启0)

4、配置redis.properties文件

因为目前获取的redis端口号为写死的,为了程序符合解耦、后期维护原则,需要动态获取端口信息

路径:resources/properties
个人学习笔记之Linux搭建Redis(从单台至集群)_第7张图片
编辑配置文件:

host为Linux的IP地址
port为Linux的端口

个人学习笔记之Linux搭建Redis(从单台至集群)_第8张图片

端口可在redis配置文件redis.config里查询

Linux查询IP命令:ifconfig
个人学习笔记之Linux搭建Redis(从单台至集群)_第9张图片

5、创建Class文件配置类

@Configuration 把类交给Spring容器管理。当Spring需要创建这个类时会调用被@Bean注解的方法。
@PropertySource("classpath:/) 加载redis.properties配置文件
@Bean 将该方法交给Spring IoC管理

@Configuration //标识配置类
//引入主启动类所在项目的配置文件
@PropertySource("classpath:/properties/redis.properties")
public class RedisConfig {
	@Value("${redis.host}")
	private String host;
	@Value("${redis.port}")
	private Integer port;
	//@Bean默认单例对象,@Scope修改为多例
	@Scope("prototype")
	@Bean
	public Jedis jedis() {
		return new Jedis(host,port);
	}
}

6、测试配置类是否生效

注意测试类的包名与主启动类包名一致

@SpringBootTest  //该测试类交给SpringBoot管理
@RunWith(SpringRunner.class)  //一个运行器,让SpringRunner类来运行
public class TestRedisConfig {
	@Autowired
	private Jedis jedis;
	@Test
	public void testtt() {
		jedis.set("ABC","abc");
		System.out.println(jedis.get("ABC"));
	}
}

输出结果

abc

搭建测试redis分片

首先先关闭单台的redis
redis-cli -p 6379 shutdown/kill -9 进程

1、创建文件夹存放三个redis服务器
在redis目录创建文件夹 shards

mkdir shards


复制三个redis.conf到shards文件夹里

cp 待复制的文件 复制到目录/更改文件名字
cp redis.conf shards/6379.conf
cp redis.conf shards/6380.conf
cp redis.conf shards/6381.conf

在这里插入图片描述
2、修改配置文件端口号
进入6380.conf、6381.conf文件,修改配置文件中的端口号
普通方法
跟搭建单台配置文件一样,利用WinSCP工具完成
命令符方法

vim 查看文件信息
vim 6380.conf

:/全文搜索
:/port

个人学习笔记之Linux搭建Redis(从单台至集群)_第10张图片
按ESC退出编辑操作,输入:wq保存并退出
修改6381.conf与上述操作一样
3、启动redis多台服务器

启动配置文件
redis-server xxx.conf

个人学习笔记之Linux搭建Redis(从单台至集群)_第11张图片
检测redis服务器是否运行成功

管道检测当前运行的进程
ps -ef | grep 搜索进程的关键词


4、测试redis分片机制

	@Test
	public void testShards() {
		List<JedisShardInfo> shards=new ArrayList<JedisShardInfo>();
		shards.add(new JedisShardInfo("192.168.52.129",6379));
		shards.add(new JedisShardInfo("192.168.52.129",6380));
		shards.add(new JedisShardInfo("192.168.52.129",6381));
		//操作分片的工具API 
		ShardedJedis jedis=new ShardedJedis(shards);
		jedis.set("A","B");
		System.out.println(jedis.get("A"));
	}

检验redis分片机制内部是否成功
成功案例:
没有把数据默认放到端口号为6379的redis里,说明分片机制成功。
个人学习笔记之Linux搭建Redis(从单台至集群)_第12张图片
5、配置redis.properties

因为目前获取的redis端口号为写死的,为了程序符合解耦、后期维护原则,需要动态获取端口信息

个人学习笔记之Linux搭建Redis(从单台至集群)_第13张图片
6、修改注入redis分片的IOC注解

@Autowired(required = false) //懒人加载
//private Jedis jedis; //redis单台、修改前
private ShardedJedis jedis;//redis分片、修改后

搭建测试redis哨兵

往新建文件夹(sentinel)里添加三个服务器和哨兵配置文件sentinel.conf

1、修改redis服务器主从关系

slaveof 主机IP 主机端口号
目标:将端口号6380设置为主机,6379、6381设置为主机的从机。


查看当前端口状态
个人学习笔记之Linux搭建Redis(从单台至集群)_第14张图片

2、修改哨兵配置文件

修改sentinel文件夹中的sentinel.conf

关闭保护模式

开启后台启动

配置哨兵监控
添加超时时间
添加选举超时时间
3、启动redis服务器与哨兵

查看当前端口状态

redis-cli -p 端口号
info replication 查看当前端口状态
master为主机,slave为从机

主机状态:
个人学习笔记之Linux搭建Redis(从单台至集群)_第15张图片
从机状态:
个人学习笔记之Linux搭建Redis(从单台至集群)_第16张图片
4、哨兵测试

目标:对主机进行宕机操作,等待选举时间10s后,查看是否有从机替代主机。

宕机操作:
redis-cli -p 端口 shutdown

这里以主机端口号为6379为例

个人学习笔记之Linux搭建Redis(从单台至集群)_第17张图片
执行宕机操作
个人学习笔记之Linux搭建Redis(从单台至集群)_第18张图片
此时进程活动:

结果分析:
6379主机被认为宕机后,由6381端口号的从机上位变成主机
5、测试哨兵

	@Test
	public void testSentinel() {
		Set<String> sentinels = new HashSet<>();
		sentinels.add("192.168.52.129:26379");
		JedisSentinelPool poll = new JedisSentinelPool("mymaster", sentinels);
		jedis.set("abc", "aaaa");
		System.out.println(jedis.get("abc"));
	}

输出

aaaa

6、SpringBoot整合哨兵
修改配置文件

#redis哨兵
redis.sentinel=192.168.52.129:26379

个人学习笔记之Linux搭建Redis(从单台至集群)_第19张图片

	@Value("${redis.sentinel}")
	private String sentinel;
	@Bean
	public JedisSentinelPool pool() {
		Set<String> sentinels=new HashSet<>();
		sentinels.add(sentinel);
		return new JedisSentinelPool("mymaster", sentinels);
	}
	@Scope("prototype")
	@Bean
	public Jedis jedis(JedisSentinelPool pool) {
		return pool.getResource();
	}

修改@Autowired

@Autowired(required = false)
//private ShardedJedis jedis; //redis分片、修改前
private Jedis jedis;//redis哨兵、修改后

搭建测试redis集群

1、配置redis集群启动需要的资源
创建一个集群文件夹

mkdir cluster
新建一个集群启动脚本和关闭脚本(shutdown.sh、start.sh)
里面不用添加脚本,后面会添加

在redis根目录中,将redis配置文件复制到集群文件夹中

cp redis.conf cluster/7000/

个人学习笔记之Linux搭建Redis(从单台至集群)_第20张图片

2、修改redis.conf配置
1)注释本地ip绑定

2)关闭保护模式

3)修改端口号

4)启动后台启动

5)修改pid文件

6)修改持久化文件路径

7)设置内存优化策略

8)关闭AOF模式

9)开启集群配置

10)开启集群配置文件

11)修改集群超时时间
在这里插入图片描述
3、将7000文件夹复制5份

在存在7000文件夹的根目录执行操作
cp 7000/redis.conf 7001/
cp 7000/redis.conf 7002/
cp 7000/redis.conf 7003/
cp 7000/redis.conf 7004/
cp 7000/redis.conf 7005/


个人学习笔记之Linux搭建Redis(从单台至集群)_第21张图片
4、修改7001-7005文件夹中redis.conf端口配置

5、在开启脚本与关闭脚本中添加指令
start.sh

#!/bin/sh
redis-server 7000/redis.conf &
redis-server 7001/redis.conf &
redis-server 7002/redis.conf &
redis-server 7003/redis.conf &
redis-server 7004/redis.conf &
redis-server 7005/redis.conf &
个人学习笔记之Linux搭建Redis(从单台至集群)_第22张图片

shutdown.sh

#!/bin/sh
redis-cli -p 7000 shutdown &
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 &
个人学习笔记之Linux搭建Redis(从单台至集群)_第23张图片

6、启动脚本并检测节点是否启动成功

sh start.sh
ps -ef|grep redis

个人学习笔记之Linux搭建Redis(从单台至集群)_第24张图片
7、配置集群主从关系
Linux控制台输出

5.0以前版本
随机分配一组一从
./src/redis-trib.rb create --replicas 1

./src/redis-trib.rb create --replicas 1 192.168.52.129:7000 192.168.52.129:7001 192.168.52.129:7002 192.168.52.129:7003 192.168.52.129:7004 192.168.52.129:7005

5.0以后版本
随机分配一组一从

./src/redis-cli --cluster create --cluster-replicas 1 192.168.52.129:7000 192.168.52.129:7001 192.168.52.129:7002 192.168.52.129:7003 192.168.52.129:7004 192.168.52.129:7005


8、测试集群

	@Test
	public void testCluster() {
		Set<HostAndPort> clus= new HashSet<HostAndPort>();
		clus.add(new HostAndPort("192.168.52.129",7000));
		clus.add(new HostAndPort("192.168.52.129",7001));
		clus.add(new HostAndPort("192.168.52.129",7002));
		clus.add(new HostAndPort("192.168.52.129",7003));
		clus.add(new HostAndPort("192.168.52.129",7004));
		clus.add(new HostAndPort("192.168.52.129",7005));
		JedisCluster jedisCluster = new JedisCluster(clus);
		jedisCluster.set("2020", "redis集群搭建完成");
		System.out.println(jedisCluster.get("2020"));
	}

输出结果

redis集群搭建完成

9、修改properties配置文件

#配置redis集群
redis.nodes=192.168.52.129:7000,192.168.52.129:7001,192.168.52.129:7002,192.168.52.129:7003,192.168.52.129:7004,192.168.52.129:7005

10、修改redisConfig文件

	@Value("${redis.nodes}")
	private String nodes;//读取配置文件中的集群端口号
	//redis集群
	@Scope("prototype")
	@Bean
	public JedisCluster jedisCluster() {
		Set<HostAndPort> nodeSet = new HashSet<>();
		String[] arrayNode = nodes.split(",");
		for (String node : arrayNode) {//遍历端口
			String host = node.split(":")[0];
			int port = Integer.parseInt(node.split(":")[1]);
			HostAndPort hostAndPort = new HostAndPort(host, port);
			nodeSet.add(hostAndPort);
		}
		return new JedisCluster(nodeSet);
	}

11、修改其他类中调用的IOC注解

@Autowired(required = false)
//private Jedis jedis; //redis哨兵、修改前
private JedisCluster jedis;//redis集群、修改后

自问自答

什么是redis?

redis是一个key-value存储系统,是一种缓存策略。
正常情况下:用户在访问网站数据库时,每一次访问都需要访问数据库。由于每一次用户直接访问系统数据库,这会导致每一次的运行速度都很慢,导致网站运行效率很低。
添加缓存:用户第一次访问网站数据库时,将数据库里的数据存储到redis,下一次访问时用户不会访问数据库,而是直接访问redis缓存中的数据。由于不用访问数据库,不用执行SQL代码,大大提高了网站运行效率。

为什么创建redis集群而不是单台?

系统完美运行的情况下:数据不会超过redis单台存储的上限,系统常年正常运行,不会出现崩溃。
正常情况下:服务器长时间收到用户访问会出现崩溃现象,若配置单台redis,则不能保证系统的高可用性

什么是高可用性?

简单理解高可用性就是redis主机出现崩溃时,宕机其中一个redis主机,系统不会崩溃,宕掉的那个redis主机的其中一个从机会乘机上位变成主机,保证系统的正常运行。
为了解决系统的高可用性,redis集群就代替了redis单台。

redis集群的原理是什么?

选举原理:当A从机发现自己的master主机宕机了,A从机会广播一条我想变成主机(FAILOVER_AUTH_REQUEST)的信息,当其他主机收到这条广播,会对广播者进行投票(FAILOVER_AUTH_ACK),如果所有主机投票数量超过一半,则A从机就摇身一变成了主机。

你可能感兴趣的:(redis,redis,java,springboot环境配置)