Redis持久化

RDB(Redis Database)

触发机制

  1. save规则满足的情况下,会自动触发rdb规则
  2. 执行flushall命令,也会触发rdb规则
  3. 退出redis,也会产生rdb文件

恢复rdb文件

  1. 将rdb文件存放在redis的启动目录
  2. 查看需要存在的位置

img

AOF(Append Only File)

以日志的形式记录每个写操作,将Redis执行过的所有指令记录下来(读操作不记录),只许追加文件而不可以改写文件,Redis启动之初会读取该文件重新构建数据.

Redis发布订阅

Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接受消息。

img

订阅端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> SUBSCRIBE dingdada #订阅名字为 dingdada 的频道
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "dingdada"
3) (integer) 1
#等待推送的信息
1) "message" #消息
2) "dingdada" #来自哪个频道的消息
3) "hello world\xef\xbc\x81" # 消息的具体内容
1) "message"
2) "dingdada"
3) "my name is dyj\x81"

发送端

1
2
3
4
5
6
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> PUBLISH dingdada "hello world!" #发送消息到dingdada 频道
(integer) 1
127.0.0.1:6379> PUBLISH dingdada "my name is dyj" #发送消息到dingdada 频道
(integer) 1

Redis主从复制

概念

主从复制是指将一台Redis服务器的数据,复制到其他的Redis服务器,前者称为master,后者称为slave.数据的复制是单向的,只能从主节点到从节点.Master以写为主,Slave以读为主.

image-20230819225131566

主从复制,读写分离.实战中80%的业务都是读操作,利用仆从服务器减缓服务器的压力

主要作用

  1. 数据冗余:实现了数据的热备份,是持久化之外的一种数据冗余方式
  2. 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复,实际上是一种服务的冗余
  3. 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务,分担服务器负载
  4. 高可用基石:主从复制是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础

一主二从

默认情况下,每台Redis服务器都是主节点

配置从机:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
127.0.0.1:6379> SLAVEOF 127.0.0.1 6380 # SLAVEOF host port
OK
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6380
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_read_repl_offset:0
slave_repl_offset:0
master_link_down_since_seconds:-1
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:0ba4b5624f5e254be973621bb67263125a86df74
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379>

哨兵模式

概述

哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行.其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例.

image-20230820140455722

使用

  1. 配置哨兵配置文件sentinel.conf
1
2
# senrinel monitor name host port 1
sentinel monitor myredis 127.0.0.1 6379 1
  1. 启动哨兵

缓存问题

缓存雪崩

缓存雪崩:缓存在同一时刻全部失效,造成瞬时DB请求量大、压力骤增,引起雪崩。缓存雪崩通常因为缓存服务器宕机、缓存的 key 设置了相同的过期时间等引起。

缓存击穿

缓存击穿:一个存在的key,在缓存过期的一刻,同时有大量的请求,这些请求都会击穿到 DB ,造成瞬时DB请求量大、压力骤增。

缓存穿透

缓存穿透:查询一个不存在的数据,因为不存在则不会写到缓存中,所以每次都会去请求 DB,如果瞬间流量过大,穿透到 DB,导致宕机。