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

Java面试题-Redis-第二天(Redis持久化、过期键删除策略、内存淘汰策略)

目录

一、Redis持久化机制

二、Redis过期键删除策略

三、Redis内存淘汰策略


一、Redis持久化机制

为了能重用Redis数据,防止系统故障造成数据丢失,我们就需要将Redis中的数据写入到磁盘中,也就是持久化

1. 有哪些方式

有rdb和aof两种方式

rdb指的是在指定的时间间隔内将数据集以快照的方式存入到磁盘中,它恢复时是将快照文件直接读取到内存中

它的特点是 对数据完整性和一致性要求不高的(因为如果在即将备份的时候还没备份的时候,Redis突然宕机了,那么就会丢失掉最后一次快照之后的所有修改) 另外是适合大规模的数据恢复,因为它是以快照的方式,恢复速度很快。同时它存入的快照也不大,省空间。但是它无法很好的保障数据不丢失....rdb的方式适合用来作备份

aof就是以日志的方式来记录每个写操作,将redis执行过程中所有的写指令都记录下来,只追加文件而不改写文件,Redis重启的时候会将日志文件中的内容从前往后执行一遍以完成数据的恢复工作。它的特点是因为是记录了每一条指令,其精度很高,即使如果出现了什么问题导致几条指令没有被记录下来,问题也不会很大,基本上也不会指令丢失,可以很好的将数据还原,能很好的保证数据的一致性和完整性,基本上数据不会丢失,但是它的缺点是:因为最后恢复的时候需要逐行执行命令,因此效率不高,恢复速度慢,另外就是对于相同的数据集,aof的方式产生的文件更大,另外就是因为是追加的方式,会造成文件越来越大,于是redis就新增的重写机制,当aof文件大小超过所设定的阈值时,Redis就会将aof文件内容进行压缩,只是保留可以恢复数据的最小指令集

2. 该如何选择

对数据完整性和一致性要求不那么高,但是对效率恢复速度有要求的,使用rdb的方式。甚至如果说对数据根本也就不那么敏感,并且能直接从其他地方重写生成补回的,可以关闭掉持久化

如果对数据一致性和完整性要高要求的,选择aof

如果是作内存数据库,那么建议两个都打开,能够兼得两种方式的好处。在Redis4.0的时候就对持久化机制作了优化:混合持久化的方式

也是一个aof文件,但是前半段是rdb格式的全量数据,后半段是aof格式的增量数据

它的优点很明显,集合了两种方式的优势

缺点是兼容性差,在4.0版本之前,都识别不了这个aof文件,同时前半段是rdb格式阅读性差

3. Redis持久化数据和缓存怎么做扩容

如果redis当作缓存使用,使用一致性hash实现动态扩容缩容

如果redis用作持久化存储数据库使用,必须使用固定的keys-to-nodes映射关系,也就是节点数量一旦确定就不能被修改。否则的话,如果是Redis节点需要动态变化,就必须使用可以在运行时进行数据再平衡的一套系统,当前只有redis集群可以做到这一点

二、Redis过期键删除策略

三种:

1. 定时删除

也就是在设置某个key的过期时间同时,创建一个定时器,让这个定时器在该过期时间到来时,立即执行删除操作

优点是对内存友好,能够保证内存中的key一旦过期就能立即删除

缺点是对cpu不友好,在过期键很多的时候,删除键是需要占用一部分cpu时间的,对服务器的吞吐量和响应时间造成了影响

2. 惰性删除

设置完key的过期时间后,我们不去管他,只有当我们需要使用它的时候,再去检查是否过期,再去进行删除

优点是对cpu友好,因为我只是会在使用它的时候才会去进行检查,对于很多用不到的key不用浪费时间去进行过期检查

缺点是:如果存在大量的key不去用它,那么这些键就会一直存在于内存中,永远不被删除,内存永远得不到释放,造成内存泄漏

3. 定期删除

也就是我隔一段时间去检查,删除过期的key

优点就是其实兼顾了定时删除和惰性删除的特点,可以通过限制删除操作的时长和频率来减少删除操作对cpu的影响。另外定期删除,也能够有效释放过期键占用的内存

缺点就是如果删除操作的时长和频率如果控制的不好,那么就会像定时删除和定期删除那样

三、Redis内存淘汰策略

redis不断删除一些过期数据,但是很多没有设置过期时间的数据也会越来越多,那么内存不够用的时候是怎么处理的呢?就是基于内存淘汰策略,删除掉一些不常用的数据,保证redis服务器正常运行

一共有8种

1. noeviction:这是默认策略,不会删除任何数据,拒绝所有写入操作并返回客户端oom的错误消息,redis只响应删和读操作

2. allkeys-lru:从所有的key使用lru算法进行淘汰(lru:最近最少使用算法)

3. allkeys-lfu:从所有的key中使用lfu算法进行淘汰(lfu:最不常用算法,根据使用频率计算,4.0版本新增的)

4. volatile-random:从设置了过期时间的key中随机的淘汰数据

5. volatile-lru:从设置了过期时间的key使用lru算法进行淘汰(lru:最近最少使用算法)

6. volatile-lfu:从设置了过期时间的key中使用lfu算法进行淘汰(lfu:最不常用算法,根据使用频率计算,4.0版本新增的)

7. volatile-random:从设置了过期时间的key随机的淘汰数据

8. volatile-ttl:从设置了过期时间的key中,淘汰即将过期的数据

相关文章:

Java面试题-Redis-第二天(Redis持久化、过期键删除策略、内存淘汰策略)

目录 一、Redis持久化机制 二、Redis过期键删除策略 三、Redis内存淘汰策略 一、Redis持久化机制 为了能重用Redis数据,防止系统故障造成数据丢失,我们就需要将Redis中的数据写入到磁盘中,也就是持久化 1. 有哪些方式 有rdb和aof两种方式…...

ElasticSearch快速入门实战

全文检索 什么是全文检索 全文检索是一种通过对文本内容进行全面索引和搜索的技术。它可以快速地在大量文本数据中查找包含特定关键词或短语的文档,并返回相关的搜索结果。全文检索广泛应用于各种信息管理系统和应用中,如搜索引擎、文档管理系统、电子…...

揭秘MySQL数据同步至Elasticsearch的最佳方案与技巧

本文介绍下当前常见的场景之一:Mysql数据同步Elasticsearch的实现方案,这里以电商为例,其实所有相关搜索内容都可以使用此方案。 对于搜索,应该是所有APP必备的基础功能,不同时期有不同的解决方案,本次重点…...

正点原子嵌入式linux驱动开发——Linux RTC驱动

RTC也就是实时时钟,用于记录当前系统时间,对于Linux系统而言时间是非常重要的,就和使用Windows电脑或手机查看时间一样,在使用Linux设备的时候也需要查看时间。本章就来学习一下如何编写Linux下的RTC驱动程序。 Linux内核RTC驱动…...

基于EasyCVR技术的大数据视频汇聚与智能分析平台设计方案

一、背景需求 大数据中心的数据建设如火如荼,针对其中城市中的视频监管及算法分析,各卡口监控、治安监控,电警监控不同网络、不同地域,如何进行视频融合、进行统一监管,则是大数据中心解决方案数据汇聚的重中之重。 现…...

骨传导耳机到底好用吗,到底骨传导耳机是不是噱头呢?

随着社会的飞速发展以及科技的不断提升,人们对健康的关注度也逐渐提高起来。而在这种背景下,骨传导耳机以其独特不可替代的优势,吸引了一大群骨传导爱好者的目光。 那么骨传导耳机是不是噱头呢?其实这种耳机不仅不会堵塞耳道&…...

bitsandbytes 遇到CUDA Setup failed despite GPU being available.

使用conda 管理环境时加载大模型会遇到bitsandbytes无法识别cuda的情况: 此处windows系统: pip install bitsandbytes-windowslinux 系统: 将bitsandbytes版本降低至0.39.0 pip install bitsandbytes0.39.0...

【机器学习】决策树与分类案例分析

决策树与分类案例分析 文章目录 决策树与分类案例分析1. 认识决策树2. 分类3. 决策树的划分依据4. 决策树API5. 案例:鸢尾花分类6. 决策树可视化7. 总结 1. 认识决策树 决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-else结构,最…...

基于物联网、大数据、云计算、人工智能等技术的智慧工地源码(Java+Spring Cloud +UniApp +MySql)

智慧工地是指利用物联网、大数据、云计算、人工智能等技术手段,为建筑施工现场提供智能硬件及物联网平台的解决方案,实现建筑工地的实时化、可视化、多元化、智慧化、便捷化。智慧工地的建设目标是实现全天候的管理监控,提高施工效率和质量&a…...

Py之pypdf:pypdf的简介、安装、使用方法之详细攻略

Py之pypdf:pypdf的简介、安装、使用方法之详细攻略 目录 pypdf的简介 pypdf的安装 pypdf的使用方法 1、基础用法 pypdf的简介 pypdf是一个免费的、开源的纯python PDF库,能够拆分、合并、裁剪和转换PDF文件的页面。它还可以为PDF文件添加自定义数据…...

谷歌Bard更新!会有哪些体验升级?

今年2月,谷歌的对话机器人Bard在发布会上翻车,遭到了科技圈的群嘲。如今半年过去了,Bard卷土重来,在9月发布了它的重磅更新“扩展插件”,集成了Gmail、Google Docs、Youtube 、Google Drive、Google Maps、Google Flig…...

[SHCTF 2023 校外赛道] reverse

week1 ez_asm 想不到第1题是个汇编,咱也不知道拿啥能弄成c,不过这题也不难,直接能看懂,关键部分。 取出异或0x1e然后保存,再取出-0xa再保存。 .text:0000000000401566 loc_401566: …...

pytorch:Model模块专题

一、说明 关于pytorch使用中,模块扮演重要校色,大部分功能不能密集展现,因此,我们这个文章中,将模块的种种功能详细演示一遍。 二、模块 PyTorch使用模块来表示神经网络。模块包括: 有状态计算的构建块。…...

Spring更加简单的读取和存储对象

前言:在上篇文章中,小编写了一个Spring的创建和使用的相关博客:Spring的创建和使用-CSDN博客,但是,操作/思路比较麻烦,那么本文主要带领大家走进:Spring更加简单的读取和存储对象! 本…...

Webpack5 系列:Babel 的配置

1.前言 本篇将介绍对于项目中 JS 文件的处理。 2.babel-loader 2-1.依赖安装 npm install -D babel-loader babel/core babel/preset-env2-2.Loader 配置 webpack.config.js module: {rules: [{test: /\.?js$/,exclude: /node_modules/,use: {loader: babel-loader}}] }…...

【Spring】DI依赖注入,Lombok以及SpEL

文章目录 1.什么是DI依赖注入2. set方法注入3. ref属性4. 有参构造方法注入5. Lombok6. SpEL 1.什么是DI依赖注入 依赖注入(Dependency Injection,简称DI)是一种设计模式,也是Spring框架的核心概念之一。其基本思想是将程序中的各…...

甘特图组件DHTMLX Gantt用例 - 如何自定义任务、月标记和网格新外观

dhtmlxGantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求,是最完善的甘特图图表库。 本文将为大家揭示DHTMLX Gantt自定义的典型用例,包括自定义任务、网格的新外观等,来展示其功能的强大性&…...

auto自动类型推导总结

auto 自动推导的规则很多、很细,当涉及移动语义、模板等复杂的规则时,很容易绕进去。因此,在使用 auto 进行自动推导时,牢记以下几点: auto 推导出的是 “值类型”,不会是 “引用类型”。auto 可以和 cons…...

透视2023,如何看清中国SaaS的未来之路?

导读:什么是更适合中国市场的SaaS道路? 如果用一个关键词概括2023年的SaaS产业,很多人会想到:难。 在过去一年时间内,SaaS产业投融资环境巨变,一级市场投融资笔数和金额骤减。根据IT桔子数据,20…...

分类预测 | Matlab实现KOA-CNN-LSTM-selfAttention多特征分类预测(自注意力机制)

分类预测 | Matlab实现KOA-CNN-LSTM-selfAttention多特征分类预测(自注意力机制) 目录 分类预测 | Matlab实现KOA-CNN-LSTM-selfAttention多特征分类预测(自注意力机制)分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Mat…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...