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…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...
SQL进阶之旅 Day 22:批处理与游标优化
【SQL进阶之旅 Day 22】批处理与游标优化 文章简述(300字左右) 在数据库开发中,面对大量数据的处理任务时,单条SQL语句往往无法满足性能需求。本篇文章聚焦“批处理与游标优化”,深入探讨如何通过批量操作和游标技术提…...
CSS 工具对比:UnoCSS vs Tailwind CSS,谁是你的菜?
在现代前端开发中,Utility-First (功能优先) CSS 框架已经成为主流。其中,Tailwind CSS 无疑是市场的领导者和标杆。然而,一个名为 UnoCSS 的新星正以其惊人的性能和极致的灵活性迅速崛起。 这篇文章将深入探讨这两款工具的核心理念、技术差…...
深入解析 ReentrantLock:原理、公平锁与非公平锁的较量
ReentrantLock 是 Java 中 java.util.concurrent.locks 包下的一个重要类,用于实现线程同步,支持可重入性,并且可以选择公平锁或非公平锁的实现方式。下面将详细介绍 ReentrantLock 的实现原理以及公平锁和非公平锁的区别。 ReentrantLock 实现原理 基本架构 ReentrantLo…...
