首页 > 数据库 >Redis分布式缓存、AOF与RDB详解

Redis分布式缓存、AOF与RDB详解

时间:2023-11-05 23:34:21浏览次数:39  
标签:AOF 文件 Redis 内存 RDB 进程

分布式缓存

单点Redis的问题

1.数据丢失问题

Redis是内存存储,服务重启可能会丢失数据

2.并发能力问题

单节点Redis并发能力虽然不错,但也无法满足如618这样的高并发场景

3.故障恢复问题

如果Redis宕机,则服务不可用,需要一种自动的故障恢复手段

4.存储能力问题

Redis基于内存,单节点能存储的数据量难以满足海量数据需求

Redis分布式缓存、AOF与RDB详解_分布式缓存

Redis持久化

●RDB持久化

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

快照文件称为RDB文件,默认是保存在当前运行目录。

Redis分布式缓存、AOF与RDB详解_RDB_02

Redis停机时会执行一次RDB。

RDB配置

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

Redis分布式缓存、AOF与RDB详解_AOF_03

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

Redis分布式缓存、AOF与RDB详解_Redis_04

bgsave执行原理

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

●当主进程执行读操作时,访问共享内存;

●当主进程执行写操作时,则会拷贝一份数据,执行写操作。

Redis分布式缓存、AOF与RDB详解_Redis_05

总结:

RDB方式bgsave的基本流程?

●fork主进程得到一个子进程,共享内存空间

●子进程读取内存数据并异步写入新的RDB文件

●用新RDB文件替换旧的RDB文件。

RDB会在什么时候执行? save 60 1000代表什么含义?

●默认是服务停止时。

●代表60秒内至少执行1000次修改则触发RDB

RDB的缺点?

●RDB执行间隔时间长,两次RDB之间写入数据有丟失的风险

●fork子进程、压缩、写出RDB文件都比较耗时

●AOF持久化

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

Redis分布式缓存、AOF与RDB详解_RDB_06

上图中的$3表示写命令字占用的字节数

AOF配置

AOF默认是关闭的,需要修改redis.conf配置文件来开启AOF:

Redis分布式缓存、AOF与RDB详解_RDB_07

AOF的命令记录的频率也可以通过redis.conf文件来配:

Redis分布式缓存、AOF与RDB详解_AOF_08

Redis分布式缓存、AOF与RDB详解_分布式缓存_09

AOF优化

因为是记录命令, AOF文件会比RDB文件大的多。而且AOF会记录对同一个key的多次写操作,但只有最后一次写 操作才有意义。通过执行bgrewriteaof命令,可以让AOF文件执行重写功能,用最少的命令达到相同效果。

Redis分布式缓存、AOF与RDB详解_Redis_10

Redis也会在触发阈值时自动去重写AOF文件。阈值也可以在redis.conf中配置:

Redis分布式缓存、AOF与RDB详解_RDB_11

RDB对比AOF

RDB和AOF各有自己的优缺点,如果对数据安全性要求较高,在实际开发中往往会结合两者来使用。

Redis分布式缓存、AOF与RDB详解_RDB_12

标签:AOF,文件,Redis,内存,RDB,进程
From: https://blog.51cto.com/AmbitionGarden/8196728

相关文章

  • Redis创始人开源最小聊天服务器,仅200行代码,几天功夫已获2.8K Star!
    Redis创始人开源最小聊天服务器,仅200行代码,几天功夫已获2.8KStar! 中午时候,在技术交流群里聊起关于Redis创始人的一些趣事,比如离开Redis之后,去写科幻小说之类的。因为好奇科幻小说,TJ君就去搜索了一下。结果一搜,发现Redis作者最近居然又搞了个新活儿!世界上最小的聊天服务器......
  • Redis设置密码以及用redis-cli -a连接redis实例
    要为Redis添加密码,您可以按照以下步骤进行操作:打开Redis配置文件。在大多数情况下,Redis的配置文件名为redis.conf,可以在Redis的安装目录中找到。在配置文件中,找到并取消注释(去掉前面的#符号)以启用密码验证的配置项。找到以下行并确保其没有被注释:requirepassyour_password将your_p......
  • 如何统计redis操作失败的次数
    要统计Redis操作失败的次数,你可以使用Redis的监控功能和相关命令。以下是一种可能的方法:开启Redis的监控功能:在Redis的配置文件中,找到redis.conf文件并确保以下行没有被注释掉:#默认禁用,你可以通过以下命令来开启:configsetnotify-keyspace-eventsKEA这将启用键空间通......
  • 简述 NoSQL 和NoSQL 中的 Redis
    简述NoSQL和NoSQL中的Redis引言 Redis是当前比较热门的NoSQL数据库产品之一,是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的高性能键值对(Key-Value)数据库(区别于MySQL的二维表格的形式存储)。它通过提供多种键值数据类型来适应不同场......
  • Redis问题大全
    一、什么是Redis?  Redis是一种支持key-value键值对数据存储的NoSQL数据库。与传统数据库不同的是,Redis的数据是保存在内存中的(内存数据库,支持持久化),因此读写速度非常快,被广泛应用于分布式缓存方向。  redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记......
  • redis的几种部署模式
     一,redis有哪几种部署模式Redis有几种常见的部署模式,包括单机模式、主从模式、哨兵模式和集群模式。单机模式:这是最简单的部署方式,仅需要在单个机器上启动Redis实例。这种模式适用于数据量较小、业务压力较小的场景。其优点是操作简单、成本低,适用于小型业务和开发测试环境。......
  • Redis 安装与配置
    Redis概述与安装GCC环境的安装与测试一、安装(1)在线安装GCCyum-yinstallgccgcc-c++autoconfpcrepcre-develmakeautomake#可选yum-yinstallwgethttpd-toolsvim1.就把gcc当成c语言编译器,g++当成c++语言编译器用就是了.(知乎)2.wget是一个从网络上自动下......
  • Redis 有哪些数据结构?
    Redis有五种基本数据结构。string字符串最基础的数据结构。字符串类型的值实际可以是字符串(简单的字符串、复杂的字符串(例如JSON、XML))、数字(整数、浮点数),甚至是二进制(图片、音频、视频),但是值最大不能超过512MB。字符串主要有以下几个典型使用场景:缓存功能计数共享Session......
  • 什么是Redis?Redis可以用来干什么?
    什么是RedisRedis是一种基于键值对(key-value)的NoSQL数据库。比一般键值对数据库强大的地方,Redis中的value支持string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、HyperLogLog、GEO(地理信息定位)等多种数据结构,因此Redis可以满足很多的应用场景。而且因为Redis......
  • java——redis随笔——实战——分布式缓存——哨兵
                                                                           ......