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.mzph.cn/news/712165.shtml

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

相关文章

不是我吹,这8道HashMap面试题让你面试时对答如流

前言 又到了一年一度的金三银四面试季,我们拿着自己的面试秘籍去面试,但是面试官的问题五花八门,让我们摸不清他们的套路。今天我就总结了面试时必问的hashmap面试题,无论面试官怎么问,我们都对答如流。 另外本人整理了…

java小记(2)

IS-A:类的父子继承关系。 default:关键字,与Java中的public,private等关键字一样,都属于修饰符关键字,可以用来修饰属性、方法以及类,但是default一般用来修饰接口中的方法。 接口与抽象类的区…

马斯克正式起诉OpenAI和奥特曼!

就在刚刚,马斯克闹出来一件大事——正式起诉OpenAI和Sam Altman,并要求OpenAI 恢复开源GPT-4等模型! 众所周知,马斯克这两年一只在推特上指责 OpenAI是CloseAI(不开源),但都只是停留在口头上。 而这次马斯克动了真格。…

从0开始python学习-53.python中flask创建简单接口

目录 1. 创建一个简单的请求,没有写方法时默认为get 2. 创建一个get请求 3. 创建一个post请求,默认可以使用params和表单传参 4. 带有参数的post请求 1. 创建一个简单的请求,没有写方法时默认为get from flask import Flask, request# 初始化一个flask的对象 ap…

USB - Battery Charing

Getting to the bottom of USB Battery Charging (了解 USB 电池充电的真相) 如今,几乎所有带电池的产品都被期望支持 BC1.2 USB 充电标准。 Today, almost every product with a battery is expected to support the BC1.2 standard for USB charging. 这对消费者来…

详解字符串函数<string.h>(上)

1. strlen函数的使用和模拟实现 size_t strlen(const char* str); 1.1 函数功能以及用法 字符串长度 strlen函数的功能是计算字符串的长度。在使用时&#xff0c;要求用户传入需要计算长度的字符串的起始位置&#xff0c;并返回字符串的长度。 #include <stdio.h> #…

基于SSM医院电子病历管理系统的设计与实现(源代码+数据库脚本+万字文档+PPT)

系统介绍 医院电子病历管理系统主要是借助计算机&#xff0c;通过对医院电子病历管理系统所需的信息管理&#xff0c;增加用户的选择&#xff0c;同时也方便对广大用户信息的及时查询、修改以及对用户信息的及时了解。医院电子病历管理系统 对用户带来了更多的便利&#xff0c…

一文读懂ZKFair PFP-CyberArmy的参与价值与潜力

3月2日&#xff0c;ZKFair PFP-CyberArmy 将在 Element 上正式开始Public Sale。

文件基础和文件fd

文章目录 预备知识C语言的文件接口系统调用文件fd 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。 点击跳转到网站。 预备知识 我们平时说文件就是说文件里…

大模型量化技术原理-SmoothQuant

近年来&#xff0c;随着Transformer、MOE架构的提出&#xff0c;使得深度学习模型轻松突破上万亿规模参数&#xff0c;从而导致模型变得越来越大&#xff0c;因此&#xff0c;我们需要一些大模型压缩技术来降低模型部署的成本&#xff0c;并提升模型的推理性能。 模型压缩主要分…

强化学习(六)时序差分

时序差分&#xff08;TD&#xff09;是强化学习的核心&#xff0c;其是蒙特卡罗&#xff08;MC&#xff09;和动态规划&#xff08;DP&#xff09;的结合。 1、TD 预测 TD 和 MC 都是利用经验来解决预测问题。一种非平稳环境的一般访问蒙特卡罗方法是 V ( S t ) ← V ( S t …

Python GUI开发库之nicegui使用详解

概要 在 Python 中,创建图形用户界面(GUI)应用程序通常需要大量的代码和时间。然而,随着 Python 生态系统的不断发展,出现了一些简化 GUI 开发过程的工具和库。其中之一就是 NiceGUI 库。本文将深入探讨 NiceGUI 库的功能、用法以及如何利用它来创建漂亮而功能丰富的 GUI…

List 集合遍历过程中删除元素避坑指南。

文章目录 1. 遍历2. 遍历过程中删除元素2.1 for 简单循环正向遍历方式2.2 for 简单循环反向遍历方式2.3 foreach 方式遍历删除2.4 Iterator的remove()方法2.5 <font color green> removeIf() &#xff08;推荐&#xff09;<green>2.6 Strem 方式 作为一名后端开发…

nginx使用详解--动静分离

什么是动静分离&#xff1f; 为了提高网站的响应速度&#xff0c;减轻程序服务器&#xff08;Tomcat&#xff0c;Jboss等&#xff09;的负载&#xff0c;对于静态资源&#xff0c;如图片、js、css等文件&#xff0c;可以在反向代理服务器中进行缓存&#xff0c;这样浏览器在请…

如何利用HubSpot海外获客系统实现海外市场扩张?

在当今全球化的时代&#xff0c;企业面临着越来越激烈的竞争&#xff0c;而海外市场则被视为获取更多增长机会的重要途径之一。针对这一挑战&#xff0c;企业需要建立一个完整的海外获客系统&#xff0c;而HubSpot软件的应用则成为了关键。作为HubSpot的合作伙伴&#xff0c;我…

librtmp源码分析

阅读了librtmp的源码&#xff0c;简单记录下。 首先补充下AMF格式基本知识 1 AMF格式 AMF是Action Message Format(动作消息格式)的简写&#xff0c;它是一种二进制的数据格式。它的设计是为了把actionscript里面的数据(包括Object, Array, Boolean, Number等)序列化成二进制…

oracle11安装及使用

安装oracle11 官网下载地址 Oracle Database 11g Release 2 for Microsoft Windows (x64) 官网下载慢可访问我的资源 也可以网盘获取 链接&#xff1a;https://pan.baidu.com/s/1RDrGkqDA7tfKRnpJXUBMDw 提取码&#xff1a;z3na 上传安装包到服务器 在指定目录下创建文件…

adb命令

1. 常用命令&#xff1a; adb devices #查看连接设备adb -s cf27456f shell # 指定连接设备使用命令adb install test.apk # 安装应用adb install -r demo.apk #安装apk 到sd 卡&#xff1a;adb uninstall cn.com.test.mobile #卸载应用&#xff0c;需要指定包adb uninstall -…

Windows系统x86机器安装龙芯(loongarch64)3A5000虚拟机系统详细教程

本次介绍在window系统x86机器上安装loongarch64系统的详细教程。 1.安装环境准备。 首先&#xff0c;你得有台电脑。 配置别太差&#xff0c;至少4核8G内存&#xff0c;安装window10或者11都行&#xff08;为啥不能是Window7&#xff0c;你要用也不是不行&#xff0c;你先解决…

leetcode:860.柠檬水找零

题意&#xff1a;按照支付顺序&#xff0c;进行支付&#xff0c;能够正确找零。 解题思路&#xff1a;贪心策略&#xff1a;针对支付20的客人&#xff0c;优先选择消耗10而不是消耗5&#xff0c;因为5可以用来找零10或20. 代码实现&#xff1a;有三种情况&#xff08;代表三种…