当前位置: 首页 > 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…...

<6>-MySQL表的增删查改

目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表&#xf…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

RLHF vs RLVR:对齐学习中的两种强化方式详解

在语言模型对齐&#xff08;alignment&#xff09;中&#xff0c;强化学习&#xff08;RL&#xff09;是一种重要的策略。而其中两种典型形式——RLHF&#xff08;Reinforcement Learning with Human Feedback&#xff09; 与 RLVR&#xff08;Reinforcement Learning with Ver…...

英国云服务器上安装宝塔面板(BT Panel)

在英国云服务器上安装宝塔面板&#xff08;BT Panel&#xff09; 是完全可行的&#xff0c;尤其适合需要远程管理Linux服务器、快速部署网站、数据库、FTP、SSL证书等服务的用户。宝塔面板以其可视化操作界面和强大的功能广受国内用户欢迎&#xff0c;虽然官方主要面向中国大陆…...