Redis应用

1. redis的应用场景

1.热点数据的缓存: 减少对数据库的访问频率,提供的应用程序的效率。

2.限时业务的运用: 比如短信验证码。

3.计数器相关问题: 比如:点赞 关注数

4.排行榜相关问题: 比如: 销售量 观看量

5.分布式锁: 比如: syn自动锁 和 lock 手动锁

2. redis持久化

扩充知识:

redis持久化理解:其就是将内存中的数据保存在磁盘的过程,作为持久化,更快捷读取数据,为减轻数据库的缓存压力,防止数据的丢失

redis持久化有两种方式:

1.RDB快照模式  【注:RDB快照模式是根据多长时间进行拍照储存,没拍照一次,新的数据将覆盖老的数据】

2.AOF日志追加模式  【注:把每个写命令通过write函数进行追加到日志中】

2.1 RDB快照模式

【注:每个一段时间对redis内存中的数据进行拍照存储。它是redis默认的持久化方式】

【注:优点是数据恢复快】

【注:缺点是可能会出现丢失最后一段时间的数据--数据完整性比较差】

RDB快照模式有两种触发模式:

2.1.1 通过save/bgsave进行手动触发

首先观察:我们进入到redis解压目录中找到dump.rdb文件

【注:我的redis软件放在/usr/local/app 下,你们的进入你们的饿redis下即可】

现在我们手动删除这个文件

rm -rf dump.rdb

 删除后,我们连接redis

redis-cli

在这其中,我随便向其中存储了一个set集合类型的元素

这时,我们手动触发RDB快照模式

返回查看redis解压目录中:

 又出现了,说明RDB手动触发成功

--------------------------------------------------------------------------------------------------------------------------------

【注:这里只演示save命令,因为bgsave一样,都是手动触发RDB的命令,只是优缺点不同】

save命令:该命令会阻塞当前Redis服务器,执行save命令期间,Redis不能处理其他命令,直到RDB过程完成为止。
执行完成时候如果存在老的RDB文件,就把新的替代掉旧的。我们的客户端可能都是几万或者是几十万,这种方式显然不可取。

bgsave命令:执行该命令时,Redis会在后台异步进行快照操作,快照同时还可以响应客户端请求。具体流程如下:

 

 -----------------------------------------------------------------------------------------------------------------------------------------

 2.1.2 自动触发模式

 【注:其是在一定时间内被执行多少次数后自动触发】

【注:其是通过修改配置文件产生效果,但是底层原理使用的还是bgsave】

【注:只需要将注释解开即可,其中,参数已经被官方所定义好,如需必要不需要改动】

这里只做演示使用。为方便,我们将其改成save 10 3

 其意义为在10秒触发3次及以上,触发RDB模式

2.2 AOF持久化

 【注:把每个写命令通过write函数追加到日志文件中。当redis启动时会读取日志文件中的命令,并把这些命令由上到下执行一遍】

 【注:优点:数据的完整性】

 【注:缺点:数据恢复慢】

【注:AOF默认不开启,需要到redis.conf文件中修改配置启动AOF模式】

进入我们的/usr/local/app/redis7 下直接打开redis.conf文件

修改:

# 需要改为yes  开启aof模式  配置文件1387行
appendonly yes

# 默认aof的日志文件名为appendonly.aof  配置文件1414行
appendfilename "appendonly.aof"

# 默认aof文件存放的目录名  配置文件1420行
appenddirname "appendonlydir"

# 触发的机制。always一直触发  everysec:每秒触发 no:如果开启aof那么就不能设置为no  配置文件1445 - 1447行
appendfsync always
#appendfsync everysec
# appendfsync no

 【注:修改配置文件后一定要保存,保存后一定要重启redis】

只能先杀掉redis进程在重启以达到重启的目的

pkill -9 redis

redis-server redis-conf

 再次进入到redis解压目录中,发现有一个appendonlydir的目录

 进入其中找到

 打开此文件,发现一片空白

 这时我们连接redis,在其中随便存储set集合类型的元素,再次打开此文件发现

AOF触发成功,将数据追加到日志中,以便数据的持久性

【注:AOF只有在写的情况下触发,只有在往其中存储的时候会触发】

3.redis集群模式

 集群模式有三种不同的表现形式:

1.主从模式

2.哨兵模式

3.集群分片模式

3.1 主从模式

【注:如果多个客户操作redis,进而导致redis承受到极限宕机,为了避免不必要的损失,首次出现的主从模式】

准备:

【注:需要准备至少三台redis服务器,虚拟机也行,一台为主节点,两台为从节点】

【注:最核心的一句话叫:配从不配主】【注:意为每增加一台redis服务器只需要将此服务器加入到主节点即可】

这里已经准备好了三台服务器用来演示:

首先需要查看这三台redis服务器当前的角色身份

命令

info replication     #查看当前redis服务器的角色身份

 

现在,我以ip为111.173.104.101这台服务器为主redis服务器,另外两台为从redis服务器

在另外两台从redis服务器分别输入

slaveof ip  port    #配置主从,这里ip需要的是主redis服务器的ip,端口是主redis服务器的端口

配置完后,再次输入info replication命令查看各自角色

发现,主服务中含有两个从服务节点,这时我们随便存入一个set的集合类型的元素数据

在从节点服务器中发现,数据可以共享。

【注:主从服务器中,数据共享】

【注:从服务器中只能读,不能写】

【注:主节点增加一些数据后,数据会同步到从服务器中】

【注:新增一个从节点,那么该从节点是可以把主节点之前的数据同步过来】

【注:当主节点宕机后,从节点不可以上位】

3.2 哨兵模式

【注:

上面的从主有缺点:主节点出现故障后,redis集群中就没有写操作。

其中,如果主节点宕机,应该让其他某台从节点自动上位。那么就需要使用哨兵模式

准备一台哨兵服务

在redis解压目录中:

发现有这个文件,为哨兵配置文件,启动哨兵将从此开始

打开此文件,我们将进行哨兵配置:

#配置哨兵,监控   哨兵集群的名称 监控主节点的ip 主节点的端口 获取哨兵的票数
sentinel monitor mymaster 192.168.235.135 6379 1        #配置文件中的第93行

启动哨兵

redis-sentinel  sentinel.conf

启动成功

 

这个时候继续查看当前服务器的角色:

【注:哨兵模式是在主Redis服务器中设置】

这时我们手动关闭主节点服务器来模拟服务器宕机的情况

SHUTDOWN    #停止redis连接

主节点关闭后,发现哨兵监控立即有了反应 

其会在从节点中进行投票,当选票数最多的从节点会被选为主节点代替

【注:当之前宕机的主节点恢复后,并不会恢复主节点的身份,而是变成从节点连接着现推选的主节点】

3.3 集群分片模式

【注:分片集群它是解决我们上面哨兵模式存在的问题。他们只有一个主节点,如果写操作频率过高,那么就会导致主节点宕机问题】

那么,如果客户端向其中写入数据,数据到底会写入到哪个主节点;

【注:其使用了分槽技术。默认集群槽的数量为16384个。而每个槽可以存放若干个数据。如果搭建redis集群模式的化,为主节点平均分片这些槽】

扩展知识:

分槽原理:Redis 集群中内置了 16384 个哈希槽,当向其中写入key 时,Redis会对这个key进行crc16算法计算,算出的结果对16384求余数,这样每个key都会对应分槽之中,对key计算取余的结果会自动分配到对应的槽中

现在我们搭建Redis分片集群:#############################

需准备6台Redis服务器

三主三从(三台作为主节点,三台作为从节点)

为方便,这里就使用一台服务器模拟6台redis服务器【192.168.235.135    7001 7002 7003 7004 7005 7006】

进入到我们的Redis解压目录中,我的是在/usr/local/app/redis7

在其中创建一个目录,用于模拟放6台redis服务器的配置文件

进入创建好的目录中,从解压目录中先复制一份redis.conf进cluster_redis目录中,且将其命名为redis7001.conf

打开文件进入修改配置:

1. 修改端口号: port 7001  【关键字port,138行】

2. 修改rdb文件的名称:dbfilename dump7001.rdb  【关键字dump,487行】  

3. 必须开启aof模式并修改aof文件的名称:

appendonly yes  【1387行】

appendfilename "appendonly7001.aof"  【1414行】

4. 开启redis集群模式cluster-enabled yes  【1584行】

5. 修改集群文件名 cluster-config-file nodes-7001.conf【1592行】

6. 设置允许任意ip访问。bind * -::* 

剩下的五个文件依次修改即可(其实剩下五个文件只需要改端口号就可)

改好后依次启动这些服务

为上面6台redis服务器分配分槽#######################

redis-cli --cluster create --cluster-replicas 1 192.168.235.135:7001 192.168.235.135:7002 192.168.235.135:7003 192.168.235.135:7004 192.168.235.135:7005  192.168.235.135:7006

【注:这里意为:为下面的这些ip分配分槽,每一个主节点跟随一个从节点;刚好三主三从】

回车会问你是否分配,确认分配

出现两个绿色的ok即表示分配成功,配置成功

启动redis客户端:

redis-cli -c -h 192.168.235.135 -p 7001

我这里在这其中存入一个set集合类型的元素

 

【注:经过crc16算法计算会自动分配到分槽中,并且会自动跳到所对应的分槽】

Redis集群配置成功!!!


以上便是Redis应用中的内容,如有漏缺请在下方留言告知,我会及时补充  

posted @ 2023-08-30 11:20  九极致之术  阅读(19)  评论(0编辑  收藏  举报