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

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

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

相关文章

链表OJ题【环形链表】(3)

目录 环形问题的思考 ❓Q1 ❓Q2 🙂Q2 ❓Q3 ❓Q4 8.环形链表 9.环形链表Ⅱ 今天接着链表的经典问题环形问题。大家一定要自己动手多写写。🙂 快慢指针(保持相对距离/保持相对速度)野指针考虑为NULL的情况带环链表&#x…

SpringBoot自动装配定义先后顺序失效原因极其解析

SpringBoot自动装配定义先后顺序失效原因极其解析 1、场景分析1.1、问题总结 2、使用AutoConfigureBefore、AutoConfigureAfter和AutoConfigureOrder注解指定加载顺序2.2、AutoConfigureXX注解失效原因总结 3、使用静态内部装配类提升加载顺序4、bean加载顺序规则 1、场景分析 …

矩阵起源加入 OpenCloudOS 操作系统开源社区,完成技术兼容互认证

近日,超融合异构云原生数据库 MatrixOne企业版软件 V1.0 完成了与 OpenCloudOS 的相互兼容认证,测试期间,整体运行稳定,在功能、性能及兼容性方面表现良好。 一、产品简介 矩阵起源 MatrixOrigin 致力于建设开放的技术开源社区和…

Nginx缓存基础

1 nginx缓存的流程 客户端需要访问服务器的数据时,如果都直接向服务器发送请求,服务器接收过多的请求,压力会比较大,也比较耗时;而如果在nginx缓存一定的数据,使客户端向基于nginx的代理服务器发送请求&…

Spring面试题:(五)Spring注解开发@Component,@Autowired,@Bean,@Configuration

Bean基本注解 spring提供注解的版本 Component注解替代bean标签 bean其它属性的相关注解: scope 替代scopelazy 替代lazy-initPostConstruct 替代init-methodPreDestroy 替代destroy-method 使用Component注解的前提是开启注解扫描 衍生注解Repository,Servi…

jdk安装

.概览 1.jdk下载 JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。 安装JDK后,会在电脑中同时安装:java的运行环境jre 和 开发环境jdk。 安装 JDK时,不建议安装太旧或太新的版本。目前的最新版本是jdk9。目前jdk8比较稳定&am…

【Lin通信】LinTrcv配置及代码分析

目录 前言 正文 1.LinTrcv模块配置 1.1LinTrcvGeneral 1.2 LinTrcvChannel 1.2.1 LinTrcvAccess 1.2.1.1 LinTrcvDioAccess

STM32 LED编程 GPIO的初始化(标准库)

实验的电路图介绍 实验的电路图类似于开漏接法 要初始化GPIOC接口 标准库的模板 GPIO的标准库编程接口 GPIO引脚的初始化 GPIO作为片上外设 每一个片上外设使用前一定要使能时钟 为什么要使能时钟?时钟是啥 时钟的使能 stm32的每一个片上外设都是时序电路 时序…

go单元格测试

编写单元测试(Unit Test)是一种测试方法,用于验证代码中的单个功能单元(通常是函数或方法)是否按照预期工作。以下是编写单元测试的一般步骤: 1. 创建测试文件:在项目的测试目录中创建一个新的…

人类为什么要发明微积分?用Python实现微积分

很久很久以前,在一个宁静的小村庄中,住着一位名叫牛顿的年轻学者。牛顿对于周围的一切都充满好奇心,他喜欢仰望星空、观察植物生长,并经常思考自然界中的各种奥秘。 有一天,当他坐在庄园的苹果树下阅读书籍时&#xf…

如何改变Wi-Fi的IP地址,提高网络连接稳定性和速度

Wi-Fi已经成为我们日常生活中必不可少的一部分。大多数家庭和办公室都依赖于Wi-Fi来连接网络和进行各种在线活动。然而,有时我们可能会遇到网络连接不稳定或速度较慢的问题。这可能是由于IP地址的设置不当所导致的。虎观代理小二二将向您介绍如何改变Wi-Fi的IP地址&…

多数据源切换

多数据源切换 jdbcTemplate二级目录三级目录 jdbcTemplate使用切面mybatis层次的多数据源spring的dynamic自动注入 jdbcTemplate 二级目录 三级目录 项目中经常会有多个数据源,那么如何处理呢 有4种方法 准备: 创建两个数据库 CREATE SCHEMA test DE…

Django中如何创建表关系,请求生命周期流程图

Django中ORM创建表关系 如何创建表关系(一对一 , 一对多 , 多对多) 图书表,出版社表,作者表,作者详情表 换位思考法判断表关系 图书表和出版社表 >>> 一对多 >>> 图书表是多,出…

GCC工具详解【Linux知识贩卖机】

很多人在喧嚣声中登场,也有少数人在静默中退出。 --单独中的洞见2 文章目录 简介程序到可执行文件链接动态链接和静态链接动态库和静态库动态库和静态库的打包打包静态库打包动态库选项 -static 总结 简介 GCC(GNU Compiler Collection) 是一…

计算机中丢失mfc140u.dll怎么解决

mfc140u.dll是一个Microsoft Visual C库文件,主要用于MFC(Microsoft Foundation Class)应用程序的开发。它包含了MFC应用程序所需的一些常用功能,如对话框、窗口、菜单等。当mfc140u.dll丢失时,可能会导致MFC应用程序无…

思科9300交换机使用USB进行升级ISO

一、下载ISO 一、网址 Software Download - Cisco Systems 二、找到型号 四、选择XE 软件 五、进行下载 二、COPY 进 U盘 一、、请注意!如果你的U盘不是Fat32文件格式则交换机读取不了,请先格式化再复制文件。 二、下载后将 bin文件复制到U盘。 1.扩展…

力扣labuladong——一刷day28

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、力扣380. O(1) 时间插入、删除和获取随机元素二、力扣710. 黑名单中的随机数 前言 常数时间删除-查找数组中的任意元素,且随机访问概率一致 如果…

idea Plugins 搜索不到插件

Settings — System Settings — HTTP Proxy,打开HTTP Proxy 页面,设置自动发现代理: 勾选Atuto-detect proxy settings,勾选Automatic proxy configuration URL,输入: https://plugins.jetbrains.com/id…

C语言 判断一个素数能被几个9整除

完整代码&#xff1a; // 判断一个素数能被几个9整除 //就是99...99%n0,n为那个素数 #include<stdio.h>int func(int n){//num是被除数就是99..9,i记录num有多少个9int num0,i0;//死循环while (1){i;numnum*109;//直到整除才跳出循环if (num%n0){//返回值为9的个数retu…

Unity 获取桌面路径的方法

在Unity中&#xff0c;当我们碰到以下一些情况时&#xff0c;可能需要桌面的路径。 1、文件操作&#xff1a;如果我们想在游戏中保存或读取文件到桌面&#xff0c;就可以使用桌面路径来指定文件的位置。 2、调试信息&#xff1a;在开发过程中&#xff0c;我们往往会将一些调试…