当前位置: 首页 > news >正文

redis 问题解决 2

1.4 数据存储

1、Redis 的数据过期策略是什么?

Redis的数据过期策略包括两种机制:被动删除和主动删除。

  1. 被动删除

    • 当某个键被访问时,如果发现这个键已经过期,Redis会立即删除这个键。这意味着如果一个过期的键从未被访问,它就不会被自动删除。这是一种惰性删除策略。
  2. 主动删除

    • Redis会定期随机测试一些键的过期时间。如果发现某些键已经过期,它就会删除这些键。这个过程是在Redis的定时任务中进行的,通常称为过期键扫描。

过期键扫描的具体步骤

  • Redis每隔一段时间执行一次过期扫描任务,它会随机抽查一些键,并检查它们是否过期。
  • 如果抽查中发现超过25%的键已经过期,Redis会立即再次抽查。
  • 这个过程会重复执行,直到过期键的比例降到25%以下。

这种组合策略有助于保持Redis内存的使用效率,避免大量过期键占用内存,但同时也不会因为删除操作而造成服务器性能的显著下降。

另外,当内存不足时,Redis还可以配置使用volatile-*allkeys-*等淘汰策略来删除键,以释放内存,这些策略和键过期是分开的,但在管理内存方面发挥着互补作用。

volatile-allkeys-

在Redis中,当使用的内存超过了为Redis配置的最大内存限制时,Redis会触发数据淘汰策略来释放内存。volatile-*allkeys-*是两类不同的数据淘汰策略,它们定义了当内存不足时Redis如何选择和淘汰数据。

这些策略可以在Redis的配置文件中设置,或者通过CONFIG SET命令动态设置。

  1. volatile-* 策略:

    • 这些策略只会考虑那些设置了过期时间的键(也就是说,它们是"易失性"的)。
    • volatile-lru:从已设置过期时间的键中使用近似最近最少使用算法(LRU)淘汰数据。
    • volatile-ttl:从已设置过期时间的键中淘汰那些剩余时间(TTL)最短的键。
    • volatile-random:随机淘汰已设置过期时间的键。
  2. allkeys-* 策略:

    • 这些策略会考虑所有的键,不论它们是否设置了过期时间。
    • allkeys-lru:从所有的键中使用近似最近最少使用算法(LRU)淘汰数据。
    • allkeys-random:从所有的键中随机淘汰数据。
    • no-eviction:不淘汰任何数据,如果内存不足,对于写操作会返回错误。

在这些策略中,"LRU"算法试图淘汰那些最近最少被访问的键,而"TTL"算法淘汰的是那些即将到期的键。"Random"算法则是完全随机选择键来淘汰。

选择哪种淘汰策略取决于你的应用场景和你希望如何处理内存压力。通常来说,如果你的应用可以接受偶尔的随机数据丢失,使用“allkeys-lru”可以帮助你保持Redis性能;如果你希望只有那些设置了过期时间的数据在内存不足时被淘汰,那么使用“volatile-lru”可能更适合你。

2、持久化文件对过期策略的处理?Redis 有哪些内存淘汰机制?

Redis通过maxmemory配置指令处理持久化文件及过期键的驱逐策略,该指令限制数据集的内存使用量。当达到内存限制时,Redis会根据maxmemory-policy配置指令确定的行为来执行。可用的驱逐策略包括:

  • noeviction:达到内存限制时,不再接受新的写操作。
  • allkeys-lru:淘汰最近最少使用的键。
  • allkeys-lfu:淘汰最不经常使用的键。
  • volatile-lru:淘汰具有过期设置的最近最少使用的键。
  • volatile-lfu:淘汰具有过期设置的最不经常使用的键。
  • allkeys-random:随机淘汰键以腾出空间。
  • volatile-random:随机淘汰具有过期设置的键。
  • volatile-ttl:淘汰具有最短剩余生存时间(TTL)且有过期设置的键。

这些策略可以在运行时设置和修改,可以通过Redis的监控命令来监控它们的性能。

4、Redis 有哪些持久化机制?

Redis 是一种内存数据库,它的数据都是存储在内存中的。为了避免数据丢失,Redis 提供了多种持久化机制来将数据保存到磁盘中。

以下是 Redis 提供的两种主要的持久化机制:

  1. RDB(Redis DataBase):RDB 是 Redis 的默认持久化机制,它会定期将 Redis 中的数据以二进制文件的形式保存到磁盘中。RDB 文件是一个经过压缩的二进制文件,其中包含了 Redis 中所有键值对的序列化数据。

  2. AOF(Append Only File):AOF 是另一种持久化机制,它会将 Redis 执行的每一个写操作都记录到一个 Append Only File 中。当 Redis 重启时,它会读取 AOF 文件并重新执行其中的写操作,从而恢复数据。

除了以上两种主要的持久化机制外,Redis 还提供了其他一些辅助的持久化机制,例如:

  1. 复制(Replication):Redis 支持主从复制,即可以将主节点的数据复制到多个从节点中。这样可以在主节点发生故障时,从节点可以提供备份数据。
  2. 哨兵(Sentinel):哨兵是 Redis 的高可用解决方案,它可以监控 Redis 主节点的状态,并在主节点发生故障时自动切换到从节点。

5、RDB v.s. AOF

Redis的RDB(快照)和AOF(追加文件)是两种主要的数据持久化机制:

  1. RDB:通过定期创建数据集的快照来进行持久化。在redis.conf配置文件中可以设置快照的创建条件,如save 60 10000意味着至少有10000个键被改变且60秒已过去时,Redis将创建一个快照。

  2. AOF:记录每个写操作命令,并在服务器重启时通过重放这些命令来重建数据集。在redis.conf文件中,可以通过appendonly yes来开启AOF,以及通过appendfsync指令来设置同步的频率。

何时需要持久化

  • 如果你需要在服务器重启后还能恢复数据,就需要持久化。
  • 如果你的数据更新非常频繁,或者说数据丢失的代价非常高,推荐使用AOF。
  • 如果你可以接受短时间内的数据丢失,可以只使用RDB。

性能比较

  • RDB的性能通常比AOF好,因为它是周期性的,对实时性能影响较小。
  • AOF可能会因为频繁的磁盘写操作而降低性能,但可以通过调整appendfsync的策略来优化。

举例 1

  • 在一个需要保证数据不丢失的电商平台上,可以启用AOF持久化,并设置为每秒同步一次,以确保即使在系统崩溃的情况下,也只会丢失一秒钟的数据。
  • 对于一个内容发布系统,其中的数据更新不是非常频繁,可以使用RDB持久化来减少对性能的影响,同时也能保证数据的安全性。
    举例 2
    假设有一个实时数据分析系统,需要频繁地写入大量的数据,并需要快速地读取数据进行分析。在这种情况下,RDB 可能是更好的选择,因为它可以定期将数据保存到磁盘中,同时可以快速地恢复数据。如果数据的完整性要求较高,可以考虑使用 AOF 进行备份,以保证数据不会丢失。
    另一个例子是一个需要保存用户操作记录的系统。在这种情况下,AOF 可能是更好的选择,因为它可以将每次用户的操作都记录到磁盘中,以便在需要时进行审计或恢复。同时,由于用户操作记录相对较少,因此 AOF 的性能影响可能相对较小。

RDB 和 AOF会把数据写到哪里?在哪里设置,如何恢复数据?

Re

相关文章:

redis 问题解决 2

1.4 数据存储 1、Redis 的数据过期策略是什么? Redis的数据过期策略包括两种机制:被动删除和主动删除。 被动删除: 当某个键被访问时,如果发现这个键已经过期,Redis会立即删除这个键。这意味着如果一个过期的键从未被访问,它就不会被自动删除。这是一种惰性删除策略。主…...

Spring Boot 校验用户上传的图片文件

图片上传是现代应用中非常常见的一种功能,也是风险比较高的一个地方。恶意用户可能会上传一些病毒、木马。这些东西不仅严重威胁服务器的安全还浪费了带宽,磁盘等资源。所以,在图片上传的接口中,一定要对用户上传的文件进行严格的…...

【springboot配置项动态刷新】与【yaml文件转换为java对象】

文章目录 一,序言二,准备工作1. pom.xml引入组件2. 配置文件示例 三,自定义配置项动态刷新编码实现1. 定义自定义配置项对象2. 添加注解实现启动时自动注入3. 实现yml文件监听以及文件变化处理 四,yaml文件转换为java对象1. 无法使…...

JS移动端触屏事件

在我们PC端中有许多的事件,那我们在移动端有没有事件呢?让我为大家介绍一下移动端常用的事件,触屏事件 触屏事件 touch (也称触摸事件),Android 和IOS 都有 touch 对象代表一个触摸点。触摸点可能是一根手指,也可能是一…...

C语言——打印1000年到2000年之间的闰年

闰年&#xff1a; 1、能被4整除不能被100整除 2、能被400整除 #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int year;for(year 1000; year < 2000; year){if((year%4 0) && (year%100!0) || (year%400 0)){printf("%d ",ye…...

【Linux】【驱动】设备树下的paltform总线

【Linux】【驱动】设备树下的paltform总线 1. 驱动程序的完整代码2. 使用到的相关函数3 使用到的指令3.2 设备上使用的指令 1. 驱动程序的完整代码 主要是展示了通过总线上挂载的方式来实现相关的数据读取 实质上就是几个of函数的调用。 /** Author: topeet* Description: 设…...

洛谷 NOIP 2023 模拟赛-汪了个汪-题解

简要题意 棋盘上有 n n n 行&#xff0c;第 i i i 行有 i i i 个格子。你要在格子填 1 ∼ n 1\sim n 1∼n&#xff0c;满足&#xff1a; 每行第一个数互不相同所有在行上相邻的两个数所组成的无序对互不相同每行的数互不相同 n ≤ 4000 n\le4000 n≤4000 题解 容易发现…...

洛谷 NOIP 2023 模拟赛 P9836 种树

洛谷 NOIP 2023 模拟赛 P9836 种树 文章目录 洛谷 NOIP 2023 模拟赛 P9836 种树题目大意思路code 题目大意 路边有 n n n 棵树&#xff0c;每棵树的 高度 均为正整数&#xff0c;记作 p 1 , p 2 … p n p_1, p_2 \dots p_n p1​,p2​…pn​。 定义一棵树的 宽度 为它高度的…...

链表经典OJ题(链表回文结构,链表带环,链表的深拷贝)

目录 前言 1.反转一个单链表。 2. 给定一个带有头结点 head 的非空单链表&#xff0c;返回链表的中间结点。 3.链表的回文结构。 4.链表带环问题&#xff08;*****&#xff09; 4.1是否带环 4.2 入环的节点 5.随机链表的复制&#xff08;链表的深拷贝&#xff09; 前言…...

AD教程 (十三)常见CHIP封装的创建

AD教程 &#xff08;十三&#xff09;常见CHIP&#xff08;贴片&#xff09;封装的创建 PCB封装是电子设计图纸和实物之间的映射体&#xff0c;具有精准数据的要求&#xff0c;在实际设计中需要通过规格书获取创建封装的数据参数。 PCB封装和实物的大小一致。PCB封装是承载实物…...

从0到1实现一个前端监控系统(附源码)

目录 一、从0开始 二、上报数据方法 三、上报时机 四、性能数据收集上报 收集上报FP 收集上报FCP 收集上报LCP 收集上报DOMContentLoaded 收集上报onload数据 收集上报资源加载时间 收集上报接口请求时间 五、错误数据收集上报 收集上报资源加载错误 收集上报js错…...

第7章-使用统计方法进行变量有效性测试-7.2-方差分析

目录 7.2 方差分析 7.2.1 单因素方差分析 组内变异 组间变异 总变异 随机误差...

【MongoDB】索引 – 文本索引(用权重控制搜索结果)

一、准备工作 这里准备一些数据 db.books.drop();db.books.insert({_id: 1, name: "Java", alias: "java 入门", description: "入门图书" }); db.books.insert({_id: 2, name: "C", alias: "c", description: "C 入…...

Git 入门使用

一、Git 入门 1.1 Git简介 Git是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。Git是由Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。 Git是目前世界上最先进的分布式版本控制系统&#xff0c;没有之一&a…...

如何写好接口自动化测试脚本

谈到接口测试&#xff0c;大家关注更多的是哪个工具更优秀&#xff0c;更好用。但是很少人关注到接口测试用例的设计问题&#xff0c;也很少人会去写接口用例&#xff0c;都代码化了嘛&#xff0c;还写什么用例&#xff0c;是吧&#xff1f; 这样真的对么&#xff1f;我们是不…...

openEuler编译安装nmon性能监控工具及可视化分析工具

ln 介绍 nmon&#xff08;short for Nigel’s Monitor&#xff09;是一个性能分析工具&#xff0c;由蓝色巨人IBM开发&#xff0c;最早用于自家操作系统UNIX&#xff0c;AIX &#xff08;Advanced Interactive eXecutive&#xff09;。现在也能用在Linux上。它可以显示系统的…...

96 前缀树Trie

前缀树 题解1 STL题解2 参考官方 Trie&#xff08;发音类似 “try”&#xff09;或者说 前缀树 是一种树形数据结构&#xff0c;用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景&#xff0c;例如自动补完和拼写检查。 请你实现 Trie 类&#xff1a; …...

“第六十六天”

这个我记得是有更优解的&#xff0c;不过还是明天发吧&#xff0c;明天想一想&#xff0c;看看能不能想起来 #include<string.h> int main() {char a[201] { 0 };char b[201] { 0 };scanf("%s %s", a, b);int na strlen(a);int nb strlen(b);int i 0, j …...

MYSQL5.7和MYSQL8配置主从

1、创建专门主从的账号 #登录 mysql -u root -p #创建用户 我这里用户名为test5&#xff0c;注意这里的ip是从库服务器的ip CREATE USER test5192.168.1.20 IDENTIFIED WITH mysql_native_password BY xxxxx; #给主从复制账号授权 grant replication slave on *.* to test5192…...

springboot苍穹外卖实战:九、小程序微信登录代码开发+商品浏览

微信登录 application.yml和application-dev.yml application-dev.yml sky:wechat:appid: xxxsecret: xxxapplication.yml sky:wechat:appid: ${sky.wechat.appid}secret: ${sky.wechat.secret}配置为微信用户生成jwt令牌时使用的配置项&#xff1a; application.yml sky…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...