Redis 的分布式缓存

Reids 分布式缓存

基于 Reids 集群来解决单机的 Reids 存在的问题。

在单机的 Reids 中存在着一共有 4 大问题。

  1. 数据丢失问题;要实现的是 Reids 的数据持久化。
  2. 并发能力问题;搭建主从集群,实现读写分离。
  3. 故障恢复问题;利用 Reids 哨兵机制,实现健康监测和自动恢复能力。
  4. 存储能力问题;搭建分片集群,利用插槽机制来实现动态扩容。

Redis 的持久化

在 Redis 中有着两种持久化的方案

  • RDB持久化
  • AOE持久化

RDB 持久化

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

RDB 持久化会在四种情况下会执行:
● 执行 save 命令
● 执行 bgsave 命令
● Redis 停机时
● 触发 RDB 条件时

执行 save 命令的时候,save 会导致 RDB,这个过程中其它所有命令都会被阻塞。只有在数据迁移时可能用到。平常情况下,不建议使用。

执行 bgsave 命令的时候。这个命令执行后会开启一个独立的进程完成 RDB,主进程可以持续处理用户请求,而不受印象。

在 Redis 停机的时候,也会触发一次 RDB 的。
在这里插入图片描述

在退出前的时候,就会执行一次 RDB 。

触发 RDB 的条件
在 Redis 内部也是有着触发 RDB 的机制,可以在 redis.conf 文件中找到,格式如下:

# 900秒内,如果至少有1个key被修改,则执行bgsave , 如果是 save "" 则表示禁用RDB
save 900 1  
save 300 10  
save 60 10000 

RDB 的也有一些其它配置也可以在 redis.conf 文件中设置:

# 是否压缩 ,建议不开启,压缩也会消耗cpu,磁盘的话不值钱
rdbcompression yes

# RDB文件名称
dbfilename dump.rdb  

# 文件保存的路径目录
dir ./ 

RDB 原理

在 bgsave 开始的时候就会 fork 主进程而得到一个子进程,子进程共享主进程的内存数据,完成 fork 以后读取内存数据并写入 RDB 文件。

以这样的方式,看似在持久化的时候,不会阻塞主进程,但是在 fork 的时候,还是会短暂性的阻塞一下主进程,在 fork 之后,主进程就不会再受打扰了。

完整流程:
当发生 bgsave 的时候,先会短暂性的暂停一下主进程,将主进程里的页表复制到子进程里面,然后将物理内存(就是磁盘)里的 Redis 数据改为 read-only 模式,只能读取模式。然后子进程通过 fork 过来的页表对数据进行操作,形成新的 RDB 文件,在完成之后,用新的 RDB 文件覆盖替换旧的 RDB 文件。当在子进程工作的时候,磁盘文件是只读模式。那么这个时候主进程产生需要对物理内存中数据修改的操作时,物理内存会将需要修改的数据复制出来,形成一个副本数据,对这个副本数据进行操作。这种情况下,以理论角度来思考,是会发生将原 RDB 数据全部进行了修改,那个这个时候,就将内存的大小进行了翻倍。

页表:就是将虚拟地址转换为物理地址 ;管理 cpu 对物理页的访问,如读写执行权限 。它就是一种映射关系。将虚拟内存与物流内存之间连接起来。

fork 采用的是 copy-on-write 技术:

  • 当主进程执行读操作时,访问共享内存;
  • 当主进程执行写操作时,则会拷贝一份数据,执行写操作。

RDB方式bgsave的基本流程概述:

  1. fork主进程得到一个子进程,共享内存空间
  2. 子进程读取内存数据并写入新的RDB文件
  3. 用新RDB文件替换旧的RDB文件

AOF 原理

AOF全称为Append Only File(追加文件)。Redis 处理的每一个写命令都会记录在 AOF 文件,可以看做是命令日志文件。

比如我们对 redis 里保存一个 SET num 123 命令
在 AOF 保存的文件里就是这样的命令:
在这里插入图片描述

AOF 持久化

在 Redis 配置文件里面 AOF 默认是关闭的。
需要修改 redis.conf 的配置文件来开启 AOF:

# 是否开启AOF功能,默认是no
appendonly yes
# AOF文件的名称
appendfilename "appendonly.aof"

AOF 的命令记录的频率也是可以通过 redis.conf 文件来配置的。(也是三种策略)

# 表示每执行一次写命令,立即记录到AOF文件
appendfs
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值