分布式缓存redis

devtools/2025/1/16 2:30:25/

redis_0">分布式缓存redis

redis_1">1 redis单机(单节点)部署缺点

(1)数据丢失问题:redis是内存存储,服务重启可能会丢失数据
(2)并发能力问题:redis单节点(单机)部署在并发量不大的话,也是可以满足要求的,并发量最多几万,无法承受更高的并发。
(3)故障恢复问题:如果redis单节点故障中断,那么会影响应用的使用。
(4)存储能力问题:内存存储无法和磁盘存储做比较,不能满足海量数据的要求。

redisredis_6">2 redis(是单线程的)集群(分布式缓存redis

redis_7">2.1 解决redis单机部署的缺点:

(1)解决数据丢失问题:redis的持久化RDB和AOF
(2)解决并发能力问题:搭建redis主从集群,实现读写分离
(3)解决故障恢复问题:搭建redis哨兵,实现健康监测和自动恢复
(4)存储能力问题:搭建redis分片集群

redisRDBAOF_12">2.2 redis的RDB和AOF持久化

redis_database_backup_13">1 RDB(redis database backup):

将内存中的数据都记录到磁盘中,重启后,可读RDB(快照)文件进行数据恢复。快照文件位置:默认保存在redis运行命令执行的目录下。
redis客户端命令:
redis-cli
>save命令:
执行一次RDB操作,主进程来执行RDB,会阻塞进程。
>bgsave命令:
后台启动,(fork主进程得到子进程)子进程执行RDB,避免主进程受影响。

特殊:如果redis是自己手动停止的,redis停机时会执行一次RDB

2 RDB的fork原理

在这里插入图片描述
Bgsave开始时会fork主进程得到子进程,子进程共享主进程的内存数据,完成fork后读取内存数据并写入RDB文件。主进程执行fork时,也是阻塞的,只能用来执行fork。
fork就是复制页表(linux的进程和物理内存(内存条)之间映射的虚拟内存),Linux中进程不能直接操作物理内存(内存条) 需要在中间借助一个虚拟内存来映射操作物理内存。
fork操作的范围
不包括:子进程写新的RDB文件(替换旧的RDB文件)的过程,fork操作只会复制页表(就是进程和物理内存的映射关系表) 生成1个子进程。
思考:
如果在fork完一个子进程后,子进程生成RDB文件过程中,有请求来修改(写)操作,那么会操作哪一部分?
当主进程执行读操作时,访问共享内存。
当主进程执行写操作时,则会拷贝一份数据,执行写操作,(只能写这个拷贝的副本数据)。后续的读请求就会访问这个副本数据。

RDB的缺点

RDB执行时间(间隔)长,2次RDB之间写入数据有丢失风险。 如果执行间隔短的话(2-3秒一次),那么太耗性能。

AOF持久化

append only file 追加文件

1 介绍
为了弥补RDB的缺点,redis处理的每一个写命令都会记录在AOF文件中(RDB是每次都重新读全部内存数据),可以看过是命令日志文件。

2 AOF文件体积大的处理方法(将AOF文件中的命令进行重写,相当于将重复命令合成一个(多个set同一个key 可合为1个最后的key操作命令))
(1)手动
redis-cli连接redis客户端,执行bgrewirterof命令,用最少的命令达到相同的效果。
在这里插入图片描述

(2)自动(在配置文件中添加)
redis也会在触发阈值时自动重写AOF文件,可在redis.conf文件中配置

RDB和AOF持久化的比较

在这里插入图片描述
对数据安全性比较高并且数据完整的话:推荐AOF持久化
宕机回复速度要求高的话:推荐RDB持久化


http://www.ppmy.cn/devtools/150816.html

相关文章

Python PyQt 子类中回调主类的函数,回调

有时我们需要在子类计算完成后,回调主类的方法显示数据; 这时我们可以用以下方式,python 确实方便; 1. 子类: from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget# 子类 c…

机器学习 - 如何理解几何学中的超平面 ?

线性回归公式 ywTxb 是数据建模中的基础: 数学上,它是一个线性函数。几何上,它是一个超平面。 那么如何理解超平面这个概念呢? 超平面(hyperplane)是几何学中的一个基本概念,尤其在高维空间和…

【C语言】字符串函数详解

文章目录 Ⅰ. strcpy -- 字符串拷贝1、函数介绍2、模拟实现 Ⅱ. strcat -- 字符串追加1、函数介绍2、模拟实现 Ⅲ. strcmp -- 字符串比较1、函数介绍2、模拟实现 Ⅳ. strncpy、strncat、strncmp -- 可限制操作长度Ⅴ. strlen -- 求字符串长度1、函数介绍2、模拟实现&#xff08…

CSS语言的网络编程

CSS语言的网络编程 引言 CSS(Cascading Style Sheets,层叠样式表)是一种用于描述HTML或XML文档外观样式的样式表语言。虽然CSS本身并不是一种编程语言,但它在网页设计和开发中发挥着至关重要的作用。随着互联网的发展&#xff0…

我在2025年自学网络安全(黑客)

当我们谈论网络安全时,我们正在讨论的是保护我们的在线空间,这是我们所有人的共享责任。网络安全涉及保护我们的信息,防止被未经授权的人访问、披露、破坏或修改。 一、网络安全的基本概念 网络安全是一种保护:它涉及保护我们的…

GitLab本地服务器配置ssh和克隆项目

1. 本地安装好git git链接:https://git-scm.com/downloads/win 无脑点击下一步安装即可,打开Git Bash命令终端如下: 2. 配置本地用户名和邮箱 git config --global user.name "你的名字" git config --global user.email "你的邮箱&quo…

Oracle分析工具-Logminer手动指定归档文件

1.概述 Logminer是自Oracle8i以后推出的分析工具,它可以读取 Oracle 数据库的归档日志和在线日志,并将其转换为易于分析的格式。logminer分析工具由一组PL/SQL包和一些动态视图组成,Oracle提供了continuous_mine参数来进行日志的持续挖掘&am…

IOS网络协议HTTP

1、网络层基础知识 1.1、HTTP 协议层级连接性可靠性应用场景TCP传输层面向连接高文件传输、网页浏览UDP传输层无连接低实时通信、流媒体HTTP应用层基于TCP由TCP保证网页浏览、API通信 HTTP通过过程 ④⑤ 是应用层通信,①②③⑥⑦⑧⑨是运输层通信①②③是三次握手…