微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

HM-SpringCloud微服务系列10.1.1【前置工作、Redis持久化之RDB持久化】

网络服务重启:systemctl restart network.service
docker服务启动:systemctl start docker
本节redis不用docker

课前准备:centos7虚拟机单机安装redis

首先需要安装Redis所需要的依赖:yum install -y gcc tcl
然后将课前资料提供的Redis安装包上传到虚拟机的任意目录(例如/tmp目录):

image


image


解压缩:tar -xvf redis-6.2.4.tar.gz
解压后:

image


进入redis目录cd redis-6.2.4
运行编译命令:make && make install
如果没有出错,应该就安装成功了。
然后修改redis.conf文件中的一些配置:

# 绑定地址,认是127.0.0.1,会导致只能在本地访问。修改为0.0.0.0则可以在任意IP访问
bind 0.0.0.0
# 数据库数量,设置为1
databases 1

启动redis服务: redis-server redis.conf
停止redis服务: redis-cli shutdown


image

image

image

image

image

image

image

image

image

image

image

image

image

image

分布式缓存(Redis集群)导言

单点redis存在4大问题的解决方案对应本章四个小结

image


image


image


image


image

1. RDB持久化

1.1 认的RDB

RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照。
简单来说就是把内存中的所有数据都记录到磁盘中。
当Redis实例故障重启后,从磁盘读取快照文件,恢复数据。
快照文件称为RDB文件认是保存在当前运行目录。
redis停机时会执行一次RDB。

image


服务端窗口1启动redis服务

image


客户端窗口2访问redis服务

image


存完一条数据后,回到服务端ctrl+c停止

image


可以从日志中看到先在磁盘的当前目录保存的RDB文件退出redis,称为“优雅停机”

image


现在ctrl+c也先停止客户端

image


然后重启服务端

image


再重启服务端访问刚才放到redis的数据

image


综上,redis认就实现了持久化
以上演示情况:不过是停机时才会触发;万一突然宕机则数据可能会丢失。

1.2 RDB参数自定义

image


先停掉服务端&客户端,修改一下配置

image


5秒内,如果有1个key被修改,就会触发

image


RDB文件名字也修改一下

image


现在重启redis服务

image


可以看到这次并没有读取RDB文件恢复数据的日志了,因为RDB文件改名字了
打开客户端测试一下

image


果不其然。
此时,现往redis里存一个数据

image


此时,查看服务端(并没有ctrl+c停止服务)也会触发(自动触发)

image


考虑到频率太快会给redis造成压力,而频率太慢又增大了数据丢失的风险;一般使用redis配置文件里提供的认触发频率就行,后续还有弥补方案

1.3 RDB底层原理

image

1.4 小结

  1. RDB方式bgsave的基本流程?
    • fork主进程得到一个子进程,共享内存空间
    • 子进程读取内存数据并写入新的RDB文件
    • 用新RDB文件替换旧的RDB文件
  2. RDB会在什么时候执行?save 60 1000代表什么含义?
    • 认是服务停止时。
    • 代表60秒内至少执行1000次修改则触发RDB
  3. RDB的缺点?
    • RDB执行间隔时间长,两次RDB之间写入数据有丢失的风险
    • fork子进程、压缩、写出RDB文件都比较耗时

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐