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…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
