首页 > 数据库 >Redis架构演进之单机版Redis和数据持久化

Redis架构演进之单机版Redis和数据持久化

时间:2024-10-18 20:52:05浏览次数:3  
标签:AOF 单机版 演进 Redis 内存 磁盘 持久 数据

单机版Redis

假设现在有一个业务应用,需要引入Redis来提高应用的性能,此时可以选择部署一个单机版的Redis来使用

业务应用可以把Redis当作缓存来使用,从MySQL里查询数据,然后写入Redis中,之后业务应用再从Redis里读取数据,因为Redis的数据都是存储在内存里的,所以整体的速度很快。

随着业务的不断发展,Redis里存储的数据也越来越多,此时业务应用对Redis的依赖也越来越重,突然有一天Redis宕机了,这时候所有的业务流量,都会打到MySQL上,这时候MySQL的压力剧增,严重的话甚至会把MySQL打挂。

这时候需要怎么办呢?肯定是需要重启Redis,可以继续让它提供服务。但是因为Redis的数据都在内存里,即使重启也会丢失,Redis中依旧没有数据,业务流量还是会打到MySQL上,依旧解决不了问题。

那我们能不能把数据额外写一份到磁盘上呢?当Redis重启的时候,可以把磁盘中的数据快速恢复到内存中,这样就可以继续正常提供服务了。

数据持久化

把内存数据写到磁盘上的过程,就是数据持久化

那么持久化具体应该怎么做呢?很容易能够想到的一个方案是:Redis每一次执行写操作的时候,既写到内存上,同时也写一份到磁盘上。

这个方案的问题在于:客户端的每次写操作,既需要写内存,又需要写磁盘,而写磁盘的耗时比写内存要多很多,肯定会影响到Redis的性能

那么如何避免这个问题呢?

可以借助多线程的思想,Redis写内存由主线程来做,写内存完成后就给客户端返回结果,然后用另一个线程去写磁盘,这样可以避免主线程写磁盘对性能的影响。

除此之外,还可以结合Redis的适用场景来考虑怎么做持久化。Redis一般用于缓存,尽管Redis中没有保存全量数据,对于不在缓存里的数据,依旧可以通过查询数据库得到结果,对业务的结果没影响,所以可以用数据快照的方式做持久化

Redis的数据快照,就是记录某一时刻下Redis中的数据,然后只需要把这个数据快照写入磁盘就可以了。

优点在于:只在需要持久化的时候把数据一次性写入磁盘,其他时间都不需要操作磁盘。

所以第二个方案就是:定时给Redis做数据快照,把数据持久化到磁盘上。

刚刚说的这两个方案,对应Redis的RDB和AOF,他们的区别如下:

  • RDB

    • 创建一个子进程,持久化某一时刻的数据快照到磁盘上

    • 采用二进制和数据压缩的方式写入磁盘,这样文件体积小,数据恢复速度快

  • AOF

    • 每一次写操作都持久化到磁盘,主线程写入到内存,根据配置决定是主线程还是子线程进行数据持久化的操作

    • 记录每一次写命令,数据全,但是文件体积大,数据恢复速度慢

对于持久化方案的选择,可以遵循以下规则:

  • 业务对于数据丢失不敏感,选择RDB

  • 业务对数据完整性要求较高,采用AOF

假设选择的是AOF方案,又会遇到以下问题:

  • AOF记录的是每一次写操作,随着时间增长,AOF的文件体积会越来越大

  • 体积大的AOF文件,在数据恢复的时候变得很慢

那怎么样缩小文件体积,提升恢复速度呢?

可以从AOF的特点入手,AOF文件记录的是每一次的写操作,对于同一个key来说,可能会发生多次修改,我们只保留最后一次被修改的值就可以了。这就是AOF rewrite 。通过对AOF文件定期rewrite,避免这个文件体积持续膨胀,在恢复时就可以缩短恢复时间了

思考一下还有没有办法继续缩小AOF文件,回顾下RDB和AOF各自的特点,可以做混合持久化,当AOF rewrite的时候,Redis先以RDB格式在AOF文件里写入一个数据快照,再把在这期间产生的每一个写命令,追加到AOF文件里。因为RDB文件是二进制压缩产生的,AOF的文件体积就变得更小了。

Redis 4.0 以上才支持混合持久化

标签:AOF,单机版,演进,Redis,内存,磁盘,持久,数据
From: https://blog.csdn.net/LightOfNight/article/details/143062108

相关文章

  • Redis 集群:高效缓存与数据存储的利器
    在当今的互联网时代,数据的存储和处理速度至关重要。Redis作为一种高性能的内存数据库,广泛应用于各种场景。而Redis集群则进一步提升了Redis的可用性、扩展性和性能。本文将为你详细介绍Redis集群的简介以及三种模式。一、Redis集群简介Redis集群是由多个Redis......
  • Redis主从复制原理
    Redis主从复制(Master-SlaveReplication)是Redis提供的一种数据冗余方案,用于实现数据的热备份和高可用性。其原理可以概括为以下几个关键点:角色定义:主节点(Master):处理写操作,并将其写操作同步给从节点。从节点(Slave):通常只处理读操作,从主节点接收数据同步。复制过程:当......
  • Redis 集群部署
    Redis集群部署环境系统:CentOS7版本:redis-7.2.6下载地址:https://download.redis.io/releases/主从集群结构三个节点:一个主节点,两个从节点IPPORT角色192.168.93.1006379master192.168.93.1016379slave192.168.93.1026379slave步骤安装前置依赖......
  • Redis 万字入门教程
    0.前言文章已经收录到GitHub个人博客项目,欢迎Star:https://github.com/chenyl8848/chenyl8848.github.io或者访问网站,进行在线浏览:https://chenyl8848.github.io/1.NoSQL1.1NoSQL介绍NoSQL(NotOnlySQL),意即不仅仅是SQL,泛指非关系型的数据库。NoSQL这个技术......
  • [Redis] 在Linux中安装Redis并连接图形化工具详细过程(附下载链接)
    前言安装Redis之前应该在虚拟机中安装Linux系统,这里使用centos7版本[linux]在VMware中安装linux、文件下载及详细安装过程(附下载链接)-CSDN博客安装Linux后,更换yum源为阿里云并安装gcc依赖[Linux]CentOS7替换yum源为阿里云并安装gcc详细过程(附下载链接)-CSDN博客redis-6......
  • 比较相同机器上 redis和mysql分别单独承载的 最大连接数量
    在相同的机器上,Redis和MySQL的最大连接数量会受到硬件配置(如CPU、内存、网络等)、配置参数和应用场景的影响。以下是对Redis和MySQL在单机环境下最大连接数的比较:Redis最大连接数量默认配置:Redis默认的最大连接数为10,000。这个值可以通过配置文件中的maxcl......
  • Redis【黑马点评】——2 秒杀
    前言:  秒杀是该项目中非常重要的一个模块,涵盖的知识点以及代码质量非常之高,里面有许多细节值得反复学习观看,能帮助我们获得非常有用的知识。这篇文章除了对该秒杀功能进行了总计,还包括许多细节的分析,如:如何加锁,为什么加这个锁,加在哪里,以及涉及了动态代理等知识,对这个模块......
  • redis 缓存击穿 缓存穿透 缓存雪崩
    一、缓存击穿如果缓存中的某个热点数据过期了,此时大量的请求访问了该热点数据,就无法从缓存中读取,直接访问数据库,数据库很容易就被高并发的请求冲垮,这就是缓存击穿的问题解决方案:互斥锁方案,请求数据库写数据到缓存之前,先获取互斥锁,保证只有一个请求会落到数据库上,减少数据库的......
  • Redis 缓存淘汰策略
    一、概述缓存淘汰策略是在Redis达到最大内存限制时,决定哪些数据需要被移除以便为新数据腾出空间的策略。这些策略通过配置文件或命令进行设置,以保证Redis在有限的内存环境下能够平稳运行。二、各种淘汰策略介绍Redis提供了8种淘汰策略,可以分成两大类:1、针对所有键的策......
  • redis 持久化策略
    一、redis持久化介绍Redis是个基于内存的数据库,服务一旦宕机,内存中的数据将全部丢失。通常的解决方案是从数据库来重新把这些数据写进redis,但后端数据库有性能瓶颈,如果是大数据量的恢复,会对数据库带来巨大的压力,导致程序响应慢。所以对Redis来说,实现数据的持久化,避免从后端数据......