7、Redis-事务、持久化、内存淘汰机制和过期key处理

目录

一、事务

二、持久化

三、内存淘汰机制

四、过期key处理


一、事务

Redis的事务本质上就是一个批量执行命令的操作。分为三个步骤:

  • 开始事务:multi
  • 命令入队:正常输入命令即可
  • 执行事务(依次执行命令):exec

执行过程中某条命令失败,事务既不会回滚,也不会停止。

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set name Trxcx
QUEUED // 命令入队而不是立即被执行
127.0.0.1:6379> set age 21
QUEUED
127.0.0.1:6379> incr age
QUEUED
127.0.0.1:6379> incr name // 错误的命令正常入队
QUEUED
127.0.0.1:6379> get name
QUEUED
127.0.0.1:6379> get age
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
3) (integer) 22
4) (error) ERR value is not an integer or out of range
5) "Trxcx"
6) "22" 
// 即使中间某条命令出错,前面的命令也没有回滚,后面的命令也没有停止。
// 整个事务就是在依次执行这些命令

二、持久化

Redis会不定时地将数据持久化到硬盘中,当Redis启动时,会把硬盘中的数据加载到内存中。

Redis持久化机制共有3种:

1、RDB(Redis DataBase ):快照方式

将内存中的数据以快照的方式写入二进制文件,默认为dump.rdb【Redis安装目录下】中。触发RDB持久化的机制分为手动触发和自动触发。

  •         手动触发:

                ①使用save命令。阻塞Redis服务器直到RDB过程完成,数据较多时会长时间阻塞。

                ②使用bgsave命令。执行fork指令创建子进程实现RDB持久化。【更建议使用】

  •         自动触发:

                使用save进行配置。格式为:save m n。

                表示m秒内数据集存在n次修改则会触发bgsave。

                save 300 10:表示300秒内超过10个key被修改,则触发RDB过程进行持久化

2、AOF(Append Only File ):文件追加方式

AOF 日志是一个增量日志文件,它会记录执行的命令。因此,重启时再重新执行AOF文件中的命令,就可以达到恢复数据的目的。

Redis默认是不开启AOF的,通过修改配置文件进行配置。redis 开启AOF - 简书 (jianshu.com)

AOF共有3种配置策略,

  • appendfsync always:立即同步命令到磁盘,效率慢但保证完全持久化
  • appendfsync everysec:每秒同步一次,效率和持久化效果居中【更推荐使用】
  • appendfsync no:依赖操作系统,通常每30s同步一次

AOF Rewrite:AOF 文件记录了每个写操作的日志,以确保数据持久性。随着时间的推移,AOF 文件会不断增大。为了解决这个问题,Redis通过AOF Rewrite 操作创建一个新的 AOF 文件,其中只包含当前数据库状态的最小命令集,然后将旧的 AOF 文件替换为这个新文件。

总结:RDB持久化文件更小,启动速度更快;AOF则在持久化的效果方面更胜一筹。

3、混合持久化方式

Redis同时开启RDB和AOF,在某时刻T1进行了RDB持久化,在下一次RDB持久化(T3)之前,Redis服务器于T2时刻重启。

此时恢复数据时,T1之前的数据以 RDB 的形式写入文件的开头(全量恢复),T1到T2之间的数据则通过执行AOF文件存储的操作命令(增量恢复),以此达到速度和持久化效率的平衡。

即以 RDB 作为全量备份,AOF 作为增量备份。

4、持久化机制选择

  • 对安全性要求高:RDB+AOF
  • 可以容忍数据丢失:RDB
  • 不推荐单独AOF,可能出现bug。

关于Redis启动:

AOF和RDB同时存在时优先加载AOF;某一个存在时就加载那一个。

都不存在或加载成功时则启动成功,存在AOF或者RDB但加载失败时则启动失败。


三、内存淘汰机制

  • LRU:Least recently used。最近最少被使用到的key被淘汰。在可选的淘汰对象中,上一次使用时间距离现在最久的key被淘汰。【recently---关注时间】
  • LFU:Least Frequently Used。最不经常使用的key被淘汰。在可选的淘汰对象中,使用次数最少的key被淘汰。【Frequently ---关注使用频次】
  • TTL:设置了过期时间且快要过期的key被淘汰。
  • 随机淘汰。

四、过期key处理

  • 惰性删除:访问key时才去判断是否过期,过期则直接删除。【CPU友好,但长期不用的key会一直存在内存中,造成内存浪费】
  • 定时删除:设置定时器,到达过期时间时立即删除。【CPU不友好,需要额外维护定时器】
  • 定期删除:隔一段时间检查一次,删除过期的key。

实际使用:惰性删除+定期删除,在CPU使用和内存浪费之间取得平衡。

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

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

相关文章

【rust】11、所有权

文章目录 一、背景二、Stack 和 Heap2.1 Stack2.2 Heap2.3 性能区别2.4 所有权和堆栈 三、所有权原则3.1 变量作用域3.2 String 类型示例 四、变量绑定背后的数据交互4.1 所有权转移4.1.1 基本类型: 拷贝, 不转移所有权4.1.2 分配在 Heap 的类型: 转移所有权 4.2 Clone(深拷贝)…

仿牛客网项目---显示评论和添加评论功能的实现

这篇文章,我来介绍一下我的项目中的另外一个功能:显示评论和添加评论。 其实这两个功能都不怎么重要,我感觉最重要的应该是用户注册登录功能,这个也了解一下,知道这么一回事儿就好。 首先设计DAO层。 Mapper public …

模型选择与评估

🚩 机器学习的一般流程包括:数据集的准备与预处理、搭建模型、模型训练、模型评估与应用。 在现实任务中,我们往往有多种学习算法可供选择,甚至对同一个学习算法,当使用不同的参数配置时,也会产生不同的模型…

11.盛最多水的容器

题目:给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 解题思路:可以…

「算法」常见位运算总结

位运算符 异或 按位异或可以实现无进位相加,所谓无进位相加,就是在不考虑进位的情况下将两个数相加(后面有道题需要用到这种操作) 异或的运算律 ①a ^ 0 a ②a ^ a 0 ③a ^ b ^ c a ^ ( b ^ c ) 有符号右移>> 将一个…

基于java+springboot动物检疫信息管理系统设计和实现

基于java SSM springboot动物检疫信息管理系统设计和实现 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文…

leetcode--接雨水(双指针法,动态规划,单调栈)

目录 方法一:双指针法 方法二:动态规划 方法三:单调栈 42. 接雨水 - 力扣(LeetCode) 黑色的是柱子,蓝色的是雨水,我们先来观察一下雨水的分布情况: 雨水落在凹槽之间,在一个凹槽的…

HotFix原理学习

原文链接:Unity 游戏用XLua的HotFix实现热更原理揭秘-CSDN博客 本文通过对XLua的HoxFix使用原理的研究揭示出来这样的一套方法。这个方法的 第一步:通过对C#的类与函数设置Hotfix标签。来标识需要支持热更的类和函数。第二步:生成函数连接器…

csv大数值不显示E科学计算法的解决方案

背景: 从其他系统获取到一个商品mid的大的数值的csv文件,然后使用excel打开的时候有各种问题,本文记录下怎么正确的展示这个大数值的csv文件 正确展示数值精度: 数值展示错误 正确展示的方法: 1使用文本编辑器比如…

【力扣白嫖日记】585.2016年的投资

前言 练习sql语句,所有题目来自于力扣(https://leetcode.cn/problemset/database/)的免费数据库练习题。 今日题目: 585.2016年的投资 表:Person 列名类型pidinttiv_2015floattiv_2016floatlatfloatlonfloat pid …

文献速递:帕金森的疾病分享--多模态机器学习预测帕金森病

文献速递:帕金森的疾病分享–多模态机器学习预测帕金森病 Title 题目 Multi-modality machine learning predicting Parkinson’s disease 多模态机器学习预测帕金森病 01 文献速递介绍 对于渐进性神经退行性疾病,早期和准确的诊断是有效开发和使…

【C++从0到王者】第四十六站:图的深度优先与广度优先

文章目录 一、图的遍历二、广度优先遍历1.思想2.算法实现3.六度好友 三、深度优先遍历1.思想2.代码实现 四、其他问题 一、图的遍历 对于图而言,我们的遍历一般是遍历顶点,而不是边,因为边的遍历是比较简单的,就是邻接矩阵或者邻接…