指令总结
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(查看当前端口状态)
http://www.redis.cn/download.html
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
1、修改Redis配置文件(普通方法)
使用WinSCP工具在当前redis目录下打开redis.conf
修改IP绑定
关闭保护模式
开启后台启动
2、修改Redis配置文件(命令符方法)
进入配置文件
vim redis.conf
全文查询
:/port
文本默认查看模式
点击键盘上DEL键,进入删除操作
点击键盘上I键,进入新增操作
操作结束后 按ESC退出操作模式
保存并退出
:wq
3、启动Redis
在当前目录启动redis
redis-server redis.conf
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启动配置类
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
编辑配置文件:
host为Linux的IP地址
port为Linux的端口
端口可在redis配置文件redis.config里查询
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-cli -p 6379 shutdown/kill -9 进程
1、创建文件夹存放三个redis服务器
在redis目录创建文件夹 shards
mkdir 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
按ESC退出编辑操作,输入:wq保存并退出
修改6381.conf与上述操作一样
3、启动redis多台服务器
启动配置文件
redis-server xxx.conf
管道检测当前运行的进程
ps -ef | grep 搜索进程的关键词
@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里,说明分片机制成功。
5、配置redis.properties
因为目前获取的redis端口号为写死的,为了程序符合解耦、后期维护原则,需要动态获取端口信息
@Autowired(required = false) //懒人加载
//private Jedis jedis; //redis单台、修改前
private ShardedJedis jedis;//redis分片、修改后
往新建文件夹(sentinel)里添加三个服务器和哨兵配置文件sentinel.conf
1、修改redis服务器主从关系
slaveof 主机IP 主机端口号
目标:将端口号6380设置为主机,6379、6381设置为主机的从机。
2、修改哨兵配置文件
修改sentinel文件夹中的sentinel.conf
配置哨兵监控
添加超时时间
添加选举超时时间
3、启动redis服务器与哨兵
查看当前端口状态
redis-cli -p 端口号
info replication 查看当前端口状态
master为主机,slave为从机
目标:对主机进行宕机操作,等待选举时间10s后,查看是否有从机替代主机。
宕机操作:
redis-cli -p 端口 shutdown
这里以主机端口号为6379为例
执行宕机操作
此时进程活动:
结果分析:
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
@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哨兵、修改后
1、配置redis集群启动需要的资源
创建一个集群文件夹
mkdir cluster
新建一个集群启动脚本和关闭脚本(shutdown.sh、start.sh)
里面不用添加脚本,后面会添加
在redis根目录中,将redis配置文件复制到集群文件夹中
cp redis.conf cluster/7000/
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/
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 &
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 &
6、启动脚本并检测节点是否启动成功
sh start.sh
ps -ef|grep redis
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
@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是一个key-value存储系统,是一种缓存策略。
正常情况下:用户在访问网站数据库时,每一次访问都需要访问数据库。由于每一次用户直接访问系统数据库,这会导致每一次的运行速度都很慢,导致网站运行效率很低。
添加缓存:用户第一次访问网站数据库时,将数据库里的数据存储到redis,下一次访问时用户不会访问数据库,而是直接访问redis缓存中的数据。由于不用访问数据库,不用执行SQL代码,大大提高了网站运行效率。
系统完美运行的情况下:数据不会超过redis单台存储的上限,系统常年正常运行,不会出现崩溃。
正常情况下:服务器长时间收到用户访问会出现崩溃现象,若配置单台redis,则不能保证系统的高可用性。
简单理解高可用性就是redis主机出现崩溃时,宕机其中一个redis主机,系统不会崩溃,宕掉的那个redis主机的其中一个从机会乘机上位变成主机,保证系统的正常运行。
为了解决系统的高可用性,redis集群就代替了redis单台。
选举原理:当A从机发现自己的master主机宕机了,A从机会广播一条我想变成主机(FAILOVER_AUTH_REQUEST)的信息,当其他主机收到这条广播,会对广播者进行投票(FAILOVER_AUTH_ACK),如果所有主机投票数量超过一半,则A从机就摇身一变成了主机。