Redis常见问题整理

news2025/1/21 12:07:21

一、Redis使用场景相关问题


在这里插入图片描述


0. 单机版Redis部署


系统环境:CentOS7

1、下载Redis所需要的镜像

yum install -y gcc tcl

2、下载redis安装包

mkdir /soft
cd /soft
wget https://download.redis.io/releases/redis-6.2.4.tar.gz

3、解压缩:

tar -xvf redis-6.2.4.tar.gz

在这里插入图片描述

4、进入redis目录:

cd  redis-6.2.4

5、运行编译命令:

make && make install

如果中间没有报错,就表示redis安装成功了。


6、修改redis.conf文件中的一些配置:

# 把绑定地址注释掉
# bind 127.0.0.1

# 把安全模式关了
protected-mode no

7、启动Redis:

redis-server redis.conf

# 进入redis客户端
redis-cli

停止redis服务:

redis-cli shutdown  

1. Redis的持久化策略有哪些


1.1 Redis数据的持久化是怎么做的?

  • Redis有两种持久化方案,分别是RDB和AOF;

  • RDB是一个快照文件(Redis数据备份文件),它是把redis内存存储的数据写到磁盘上,当redis实例宕机恢复数据的时候,方便从RDB的快照文件中恢复数据;(RDB默认是开启的)

  • AOF的含义是追加文件,当redis进行写操作时,都会把每一个写命令记录在AOF文件(命令日志文件),当redis实例宕机恢复数据的时候,会从这个AOF文件中再次执行一遍命令来恢复数据;(AOF默认是关闭的,需要修改redis.conf配置开启AOF)


RDB和AOF哪种恢复的比较快?

  • RDB因为是二进制文件,在保存的时候体积也是比较小的,它恢复的比较快,但是它有可能会丢数据;
  • 我们通常在项目中也会使用AOF来恢复数据,虽然AOF恢复的速度慢一些,但是它丢数据的风险要小很多,在AOF文件中可以设置刷盘策略,默认刷盘策略是everysec表示每秒批量写入一次命令。

1.2 RDB执行时机和原理

Redis何时会创建rdb文件:

  • 手动执行save命令;(由主进程执行rdb,会阻塞所有命令)
  • 手动执行bgsave命令;(开启子进程执行rdb,避免主进程受到影响)
  • Redis停机时;
  • 触发RDB条件时。

示例:RDB持久化操作

(1)Redis停机时,会自动执行一次save命令,实现RDB持久化。

在这里插入图片描述


(2)手动执行save命令,实现RDB持久化。(由Redis主进程来执行RDB,会阻塞所有命令)

在这里插入图片描述
在这里插入图片描述


(3)手动执行bgsave命令,实现RDB持久化。(开启子进程执行RDB,避免主进程受到影响)

在这里插入图片描述

在这里插入图片描述


(4)修改RDB触发条件,实现自动保存(Redis内部有触发RDB的机制,可以在redis.conf文件中找到,默认是开启的)

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

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

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

# RDB文件名称
dbfilename dump.rdb  

# 文件保存的路径目录, ./表示当前目录
dir ./ 

修改配置文件后,重启redis服务即可。


RDB的执行原理:

当执行bgsave时,主进程会调用fork函数创建子进程,子进程共享主进程的内存数据(拷贝页表,页表里面存储映射数据)。最后子进程读取内存数据并写入RDB文件。

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

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

在这里插入图片描述


1.3 AOF原理

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

在这里插入图片描述


1.4 AOF配置和刷盘策略

AOF配置:

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

# 禁用RDB(去除rdb持久化配置)
save ""

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

在这里插入图片描述

重启redis:

# 关闭redis
[root@localhost redis-6.2.4]# redis-cli shutdown

# 开启redis
[root@localhost redis-6.2.4]# redis-server redis.conf

刷盘策略:

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

# 表示每执行一次写命令,立即记录到AOF文件
appendfsync always 
# 写命令执行完先放入AOF缓冲区,然后表示每隔1秒将缓冲区数据写到AOF文件,是默认方案(推荐使用)
appendfsync everysec 
# 写命令执行完先放入AOF缓冲区,由操作系   统决定何时将缓冲区内容写回磁盘
appendfsync no
配置项刷盘时机优点缺点
always同步刷盘可靠性高,几乎不丢数据性能影响大
everysec每秒刷盘性能适中最多丢失1秒数据
no操作系统控制性能最好可靠性较差,可能丢失大量数据

在这里插入图片描述

在这里插入图片描述


1.5 AOF文件重写


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

在这里插入图片描述

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

# 当前AOF文件比上次文件增长超过多少百分比时则触发重写,例如超过100%触发重写
auto-aof-rewrite-percentage 100
# AOF文件体积最小多大以上才触发重写 ,例如超过60m触发重写
auto-aof-rewrite-min-size 64mb 

1.6 RDB与AOF对比

如果对数据安全性要求较高,在实际开发中往往会结合两者来使用。(也就是两都开启)

RDBAOF
持久化方式定时针对整个内存做快照记录每次执行的命令
数据完整性不完整,两次备份之间会丢失相对完整,取决于刷盘策略
文件大小会有压缩,文件体积小记录命令,文件体积很大
宕机恢复速度很快
数据恢复优先级低,因为数据完整性不如AOF高,因为数据完整性更高
系统资源占用高,大量CPU和内存消耗低,主要是磁盘IO资源,但AOF重写时会占用大量CPU和内存资源
使用场景可以容忍数分钟的数据丢失,追求更快的启动速度对数据安全性要求较高常见

总结:RDB方式恢复数据速度快但会丢失数据基于快照实现,AOF恢复数据速度慢但数据完整性高基于命令实现。


2. 什么是缓存穿透


缓存穿透:就是黑客根据接口去请求缓存中不存在的数据,导致每次请求都查数据库,从而数据库宕机。

在这里插入图片描述


解决方案:

  • 缓存空数据
  • 布隆过滤器

解决方案1:缓存空数据

缓存空数据:当数据库查询的数据为空,就把这个空结果进行缓存;例如 {key:10010,value:null}

  • 优点:实现简单
  • 缺点:消耗内存,可能会发生数据不一致问题

解决方案2:布隆过滤器

在这里插入图片描述

优点:内存占用较少,没有多余key

缺点:实现复杂,存在误判

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/468974.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT-DAY3

实现ui 字体、颜色、保存文件、打开文件 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//字体按钮对应的槽函数 void Wid…

性能测试技术笔记:如何设计一个压测平台 ?

目录 为什么需要压测平台? 压测平台功能设计思路 压测平台技术实现方案 总结 为什么需要压测平台? 从实际工作场景出发,如果只有一两个人做性能测试工作,那其实没必要开发专门的压测平台,原因如下: 成…

【备战秋招】权限常见面试题

本文的面试题和答案均为本人自己收集,如有错误或者不足,欢迎大家指出 目录 你做过的系统,权限是怎么管理的 Shiro是靠什么做认证和授权的 什么是RBAC模型 如果让你手写一个Web过滤器验证权限,你会怎么写 Shiro的anon和authc都…

锅炉燃烧自动控制系统

串级控制 以外环温度、内环煤气流量为例 重点1 主PID输出0~100需要经过线性转换模块进行转换,转换成与煤气流量相同量纲才能作为副PID的设定值。假设煤气流量量程100000;则副PID设定值如下: secSET mainLMN/100*100000; 重点2…

创造者基金 2023 年 4 月亮点

隆重推出创作者基金的 2023 年 4 月亮点 NFT 系列——一系列令人着迷且令人惊叹的数字资产,让大家为之震撼!该系列的角色令人惊叹,包括阿兹特克酋长、维京战士、残酷的国王、传奇的九尾狐等等,是收藏家和爱好者的必备之物。 无论你…

优化 | 随机原始对偶混合梯度(SPDHG)算法及在图像处理中的应用

论文解读者:陈宇文,胡明杰,史铭伟,赵田田 许多实际问题都可以建模为凸优化问题。相比于直接求解原问题,将问题转化为鞍点问题往往会带来好处。求解鞍点问题的一种常用算法是原对偶混合梯度算法 (PDHG),它在…

ubuntu-server22.04编译Redis7.0.11源码支持TLS

1.克隆redis源码: git clone https://github.com/redis/redis.git 编译前确认已安装GCC11与G++11和cmake及make及pkg-config 安装命令如下: apt install gcc -y apt install g++ -y apt install cmake -y apt install pkg-config 因为要支持TLS所以要安装OPENSSL开发库 ap…

阿里云CPFS与OSS之间数据双向流动机制

随着云上对象存储成本的逐渐降低,越来越多的企业利用阿里云OSS存储他们的大量数据并构建数据湖。现在阿里云文件存储CPFS与对象存储OSS实现了深度集成,客户可以在三十分钟内创建一个高性能CPFS文件系统并链接到他们的OSS bucket。当链接到OSS bucket以后…

实验二 ROS结合OpenCV示例——人脸识别

ROS结合OpenCV示例——人脸识别 一、实验原理&#xff1a;二、实验步骤&#xff1a;<1> 安装opencv 以及串口功能包<2> 测试opencv串口是否安装成功 三、程序分析&#xff1a; 一、实验原理&#xff1a; Opencv库是一个基于BSD许可发行的跨平台开源计算机视觉库&a…

STM32WB55_NUCLEO开发(9)----接收手机数据点亮LED

概述 本篇文章主要介绍如何使用STM32CubeMX对生成STM32WB工程&#xff0c;并通过与STM32WB配对&#xff0c;向该特征写入一个任意字节&#xff0c;绿色LED会切换。 硬件准备 首先需要准备一个开发板&#xff0c;这里我准备的是NUCLEO-WB55RG 的开发板&#xff1a; 选择芯片…

加拿大各省接受公立教育的初始年龄汇总 — 供携子女赴加的访学、博后参考

近年来到加拿大从事访问学者和博士后研究的申请者日益增多&#xff0c;有些申请者想带孩子同去上公立学校。因为加拿大各省教育局政策有差异&#xff0c;所以入学&#xff08;包括学前班&#xff09;年龄不同&#xff0c;为此知识人网小编整理本文为大家解惑答疑。 加拿大为本国…

GitHub Actions自动发布Package到Pub.dev

一、创建package或plugin 先创建一个package或者plugin 二、手动上传第一个版本到pub.dev flutter packages pub publish --serverhttps://pub.dartlang.org 三、在admin配置自动化发布 打开pub.dev中的对应的package按照以下图片配置 四、在项目跟目录配置发布脚本 1、在…

XMLMapperBuilder解析*mapper.xml

springboot的MybatisAutoConfiguration自动配置类会创建SqlSessionFactory&#xff0c;创建过程就是填充configuration属性&#xff0c;调用buildSqlSessionFactory()方法完成SqlSessionFactory创建&#xff0c;这其中就会创建XMLMapperBuilder解析mapper.xml和XMLConfigBuilde…

UHD在DPDK下进行编译

1.安装choco windows环境,用管理员权限打开 powershell 命令行界面。 输入命令:Set-ExecutionPolicy AllSigned 继续输入命令:Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]…

C++---区间DP/高精度计算---凸多边形的划分(每日一道算法2023.4.27)

注意事项&#xff1a; 本题是"区间DP—能量项链"的扩展题&#xff0c;可以先理解下那道题。 本题使用了"高精度乘法"和"高精度加法"&#xff0c;可以去这两篇文章看&#xff0c;有详解。 题目&#xff1a; 给定一个具有 N 个顶点的凸多边形&…

什么是SSO?

SSO&#xff08;Single Sign On&#xff09;单点登录。SSO是在多个应用系统中&#xff0c;用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。它是目前比较流行的企业业务整合的解决方案之一。 当…

中山大学_程序设计新手赛2023_4题的小朋友_总结

送自己一句话&#xff1a;即使生活很不顺利&#xff0c;也不要成为一个连自己都讨厌的人 那样&#xff0c;当你有一天回首过往&#xff0c;只不过是在演戏中匆匆做过这一生 题目&#xff1a;见我上传的资源 A:关于时间复杂度 解&#xff1a; 1.关键&#xff1a; 法一&…

前端开发之axios请求封装详细讲解

前端开发之axios请求封装 前言1、安装axios2、创建公共文件request3、导入axiso4、初始化axios5、axios请求拦截器6、axios响应拦截器7、handleData&#xff1a;处理请求后来的response8、CODE_MESSAGE&#xff1a;code信息 前言 在vue项目中&#xff0c;和后台交互获取数据这…

openEuler社区人才评定考试流程指引

最近因为公司工作的需要参加考试了openEuler社区人才评定考试&#xff0c;本次考试题型主要包括单选、多选、判断三类题型。考试内容基本都是操作系统使用相关的内容。 考试需要注意事项&#xff1a; 1.考试为线上答题考试&#xff0c;需开启摄像头。 2.考试期间请保持周围环…

SQL server增删改查(1)

SQL server数据类型 整数型: BIGINT INT SMALLINT 小数型: FLOAT DOUBLE 文本型: CHAR VARCHAR NCHAR NVARCHAR TEXT 日期和时间类型 DATE TIME DATETIME 布尔型: BIT 数据类型含义INT长整数(也可以写作INTEGER)SMALLINT短整数CHAR(n)长度为n的定长字符串, 不足n个字符的空白部…