您当前的位置: 首页 >  redis
  • 3浏览

    0关注

    214博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Redis(三):持久化配置+消息队列+乐观锁+主从复制+配置文件详解

不愿透露姓名の网友 发布时间:2019-11-08 22:48:27 ,浏览量:3

文章目录
  • 一、消息订阅
  • 二、Redis持久化配置
    • 1.RDB快照
    • 2.AOF日志
    • 3.两种持久化机制的比较
    • 4.混合持久化
    • 5.redis持久化相关的问题
  • 三、Redis主从复制
    • 1、集群的作用
    • 2、主从通信过程
    • 3、主从配置(配置两个从机)
  • 四、配置文件详解
    • 1、基本配置
    • 2、主从配置
    • 3、安全
    • 4、限制
    • 5、日志模式

一、消息订阅

看这里:https://blog.csdn.net/w15558056319/article/details/121490953

二、Redis持久化配置

为了防止数据丢失以及服务重启时能够恢复数据,Redis支持数据的持久化,主要分为两种方式,分别是RDB和AOF,redis默认采用的是RDB的方式。

1.RDB快照

RDB(Redis DataBase)是将某一个时刻的内存快照(Snapshot),以二进制的方式写入磁盘的过程。

RDB 优点:

  • RDB 的内容为二进制的数据,占用内存更小,更紧凑,更适合做为备份文件;
  • RDB 对灾难恢复非常有用,它是一个紧凑的文件,可以更快的传输到远程服务器进行 Redis 服务恢复;
  • RDB 可以更大程度的提高 Redis 的运行速度,因为每次持久化时 Redis 主进程都会 fork() 一个子进程,进行数据持久化到磁盘,Redis 主进程并不会执行磁盘 I/O 等操作;
  • 与 AOF 格式的文件相比,RDB 文件可以更快的重启。

RDB 缺点:

  • 因为 RDB 只能保存某个时间间隔的数据,如果中途 Redis 服务被意外终止了,则会丢失一段时间内的 Redis 数据;
  • RDB 需要经常 fork() 才能使用子进程将其持久化在磁盘上。如果数据集很大,fork() 可能很耗时,并且如果数据集很大且 CPU 性能不佳,则可能导致 Redis 停止为客户端服务几毫秒甚至一秒钟。

RDB的配置

Rdb快照的配置选项,在redis.windows.conf:

save 900 1 // 900内,有1条写入,则产生快照
save 300 1000 // 如果300秒内有1000次写入,则产生快照
save 60 10000 // 如果60秒内有10000次写入,则产生快照

(这3个选项都屏蔽,则rdb禁用)

和持久化相关的redis配置:

  • stop-writes-on-bgsave-error yes // 后台备份进程出错时,主进程停不停止写入
  • rdbcompression yes // 导出的rdb文件是否压缩
  • Rdbchecksum yes // 导入rbd恢复时数据时,要不要检验rdb的完整性
  • dbfilename dump.rdb //导出来的rdb文件名
  • dir ./ //rdb的放置路径
2.AOF日志

AOF(Append Only File)中文是附加到文件,顾名思义 AOF 可以把 Redis 每个键值对操作都记录到文件(appendonly.aof)中。Redis 默认是关闭 AOF 持久化的。

AOF 优点:

  • AOF 持久化保存的数据更加完整,AOF 提供了三种保存策略:每次操作保存、每秒钟保存一次、跟随系统的持久化策略保存,其中每秒保存一次,从数据的安全性和性能两方面考虑是一个不错的选择,也是 AOF 默认的策略,即使发生了意外情况,最多只会丢失 1s 钟的数据;
  • AOF 采用的是命令追加的写入方式,所以不会出现文件损坏的问题,即使由于某些意外原因,导致了最后操作的持久化数据写入了一半,也可以通过 redis-check-aof 工具轻松的修复;
  • AOF 持久化文件,非常容易理解和解析,它是把所有 Redis 键值操作命令,以文件的方式存入了磁盘。即使不小心使用 flushall 命令删除了所有键值信息,只要使用 AOF 文件,删除最后的 flushall 命令,重启 Redis 即可恢复之前误删的数据。

AOF 缺点:

  • 对于相同的数据集来说,AOF 文件要大于 RDB 文件;
  • 在 Redis 负载比较高的情况下,RDB 比 AOF 性能更好;
  • RDB 使用快照的形式来持久化整个 Redis 数据,而 AOF 只是将每次执行的命令追加到 AOF 文件中,因此从理论上说,RDB 比 AOF 更健壮。

Aof 的配置:

  • appendonly no # 是否打开 aof日志功能
  • appendfsync always # 每1个命令,都立即同步到aof.安全,速度慢
  • appendfsync everysec # 折衷方案,每秒写1次
  • appendfsync no # 写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到 aof. 同步频率低,速度快。
  • no-appendfsync-on-rewrite yes: # 正在导出rdb快照的过程中,要不要停止同步aof
  • auto-aof-rewrite-percentage 100 #aof文件大小比起上次重写时的大小,增长率100%时,重写
  • auto-aof-rewrite-min-size 64mb #aof文件,至少超过64M时,重写
3.两种持久化机制的比较

在这里插入图片描述

4.混合持久化
  • RDB 和 AOF 持久化各有利弊,RDB 可能会导致一定时间内的数据丢失,而 AOF 由于文件较大则会影响 Redis 的启动速度,为了能同时使用 RDB 和 AOF 各种的优点,Redis 4.0 之后新增了混合持久化的方式。
  • 在开启混合持久化的情况下,AOF 重写时会把 Redis 的持久化数据,以 RDB 的格式写入到 AOF 文件的开头,之后的数据再以 AOF 的格式化追加的文件的末尾。

混合持久化优点:

  • 混合持久化结合了 RDB 和 AOF 持久化的优点,开头为 RDB 的格式,使得 Redis 可以更快的启动,同时结合 AOF 的优点,有减低了大量数据丢失的风险。

混合持久化缺点:

  • AOF 文件中添加了 RDB 格式的内容,使得 AOF 文件的可读性变得很差;
  • 兼容性差,如果开启混合持久化,那么此混合持久化 AOF 文件,就不能用在 Redis 4.0 之前版本了。
5.redis持久化相关的问题

1、在dump rdb过程中,aof如果停止同步,会不会丢失? 在这里插入图片描述

2、aof重写是指什么? 答:由于日志保存的是所有操作命令,导致存的日志会过大,而且数据库中有可能数据进行过删除,因此日志中的一些命令就相当于无效,因此日志先会删除,然后内存中的数据会逆化成命令,再重新写入到日志文件中,以解决 aof日志过大的问。

3、如果rdb文件,和aof文件都存在,优先用谁来恢复数据? 答: 在这种情况下,当redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件完整。

4、恢复时rdb和aof哪个恢复的快 答: rdb快,因为其是数据的内存映射,直接载入到内存,而aof是命令,需要逐条执行

三、Redis主从复制 1、集群的作用
  • 主从备份----防止主机宕机
  • 读写分离----分担master 的任务
  • 任务分离----如从服分别分担备份工作与计算工作

在这里插入图片描述

第二种方案有一个好处:master宕机后,可以直接切换到slave1

2、主从通信过程

步骤: 在这里插入图片描述

3、主从配置(配置两个从机)

步骤一:进入redis目录,先复制两个redis.windows.conf

在这里插入图片描述

步骤二:修改主机配置文件(禁用rdb,打开aof) 在这里插入图片描述

步骤三:配置两个从服务器(一台启用rdb,两台禁用aof,设置slave-of)

6380端口

在这里插入图片描述 在这里插入图片描述

6381端口 在这里插入图片描述

在这里插入图片描述

步骤四:进入redis目录下cmd,启动三台服务器

redis-server redis.windows.conf    默认启动
redis-server redis.windows6380.conf 
redis-server redis.windows6381.conf 

在这里插入图片描述 在这里插入图片描述

步骤五:启动客户端,再5库插入一条数据 在这里插入图片描述 步骤六:退出客户端,登录80端口看是否存在

四、配置文件详解 1、基本配置
daemonize no 是否以后台进程(守护进程)启动
databases 16 创建database的数量(默认选中的是database 0)
port 6379 设置redis的端口号

save 900 1    #刷新快照到硬盘中,必须满足两者要求才会触发,
                即900秒之后至少1个关键字发生变化。
save 300 10  #必须是300秒之后至少10个关键字发生变化。
save 60 10000 #必须是60秒之后至少10000个关键字发生变化。
stop-writes-on-bgsave-error yes    #后台存储错误停止写。
rdbcompression yes    #使用LZF压缩rdb文件。
rdbchecksum yes    #存储和加载rdb文件时校验。
dbfilename dump.rdb    #设置rdb文件名。
dir ./    #设置工作目录,rdb文件会写入该目录。
2、主从配置
slaveof   设为某台机器的从服务器,不用加引号
masterauth    连接主服务器的密码
slave-serve-stale-data yes  # 当主从断开或正在复制中,从服务器是否应答
slave-read-only yes #从服务器只读
repl-ping-slave-period 10 #从ping主的时间间隔,秒为单位
repl-timeout 60 #主从超时时间(超时认为断线了),要比period大
slave-priority 100    #如果master不能再正常工作,
                       那么会在多个slave中,选择优先值最小的一个slave
                       提升为master,优先值为0表示不能提升为master。

repl-disable-tcp-nodelay no #主端是否合并数据,大块发送给slave
3、安全
requirepass foobared # 需要密码
                 #如果公共环境,可以重命名部分敏感命令 如config
通过【config set requirepass 密码】 
    来设置 的密码为临时密码,重启后失效 
4、限制
maxclients 10000 #最大连接数
maxmemory  #最大使用内存 200m

maxmemory-policy volatile-lru #内存到极限后的处理
                volatile-lru -> LRU算法删除过期key
                allkeys-lru -> LRU算法删除key(不区分过不过期)
                volatile-random -> 随机删除过期key
                allkeys-random -> 随机删除key(不区分过不过期)
                volatile-ttl -> 删除快过期的key
                noeviction -> 不删除,返回错误信息
5、日志模式
appendonly no #启用aof日志,yes启用
#读写频率
appendfsync no # 系统缓冲,统一写,速度快
appendfsync everysec #折衷,每秒写1次
appendfsync always # 每写一条,就存入aof日志中进行同步

no-appendfsync-on-rewrite no #为yes,则其他线程的数据放内存里, 
                              合并写入(速度快,容易丢失的多)
auto-AOF-rewrite-percentage 100 #aof文件增长比例,
                               指当前aof文件比上次重写的增长比例大小。
                               aof重写即在aof文件在一定大小之后,
                               重新将整个内存写到aof文件当中,
                               以反映最新的状态(相当于bgsave)。
auto-AOF-rewrite-min-size 64mb aof重写至少要达到的大小
关注
打赏
1657102503
查看更多评论
立即登录/注册

微信扫码登录

0.0376s