说说Redis的内存淘汰策略?

大家好,我是锋哥。今天分享关于【说说Redis的内存淘汰策略?】面试题。希望对大家有帮助;

说说Redis的内存淘汰策略?

1000道 互联网大厂Java工程师 精选面试题-Java资源分享网

Redis 提供了多种内存淘汰策略,用于在内存达到限制时决定如何处理超出部分的数据。Redis 是一个基于内存的数据库,它需要一个合理的策略来处理内存不足的情况。具体的内存淘汰策略可以通过配置文件中的 maxmemory-policy 参数来设置。

以下是 Redis 支持的几种常见的内存淘汰策略:

1. noeviction

  • 描述:此策略是默认设置,表示当 Redis 达到最大内存限制时,不会再插入新的数据,并且会返回错误(OOM command not allowed when used memory > 'maxmemory')。
  • 适用场景:当你希望确保数据始终存在于 Redis 中,并且不希望丢失任何数据时使用此策略。比如一些需要持久化的业务场景。

2. allkeys-lru (Least Recently Used)

  • 描述:当内存超限时,Redis 会尝试移除最近最少使用的键(LRU,Least Recently Used)。这意味着,Redis 会删除那些最久未被访问的键,释放内存。
  • 适用场景:适用于缓存类的场景,最近未使用的数据可能不再重要,可以优先淘汰。

3. volatile-lru (Least Recently Used)

  • 描述:与 allkeys-lru 相似,但它只会删除设置了过期时间(TTL)的键。即 Redis 只会删除那些具有过期时间的、最久未被访问的键。
  • 适用场景:适用于存储过期数据的场景,如会话数据缓存等。

4. allkeys-random

  • 描述:当内存达到上限时,Redis 会随机删除键,释放内存空间。
  • 适用场景:当你不关心哪些数据被淘汰,只要释放一些空间时,可以使用此策略。

5. volatile-random

  • 描述:与 allkeys-random 类似,但它只会删除具有过期时间(TTL)的键。Redis 会随机选择其中的一些过期键进行删除。
  • 适用场景:类似于 volatile-lru,适用于只关心过期数据的场景。

6. volatile-ttl

  • 描述:当内存超限时,Redis 会优先删除那些即将过期的键。它会选择那些剩余过期时间最短的键进行淘汰。
  • 适用场景:适合一些缓存数据,它们的生命周期比较短,临近过期的数据会优先被删除。

7. allkeys-ttl

  • 描述:与 volatile-ttl 类似,但会淘汰所有键,而不仅仅是设置了过期时间的键。Redis 会优先删除那些即将过期的键。
  • 适用场景:这种策略适用于你希望 Redis 自行管理数据生命周期,并且希望临近过期的数据优先被删除的场景。

总结

  • LRU(Least Recently Used)策略:优先淘汰最近最少使用的键。
  • Random策略:随机删除键,适用于无特定需求的场景。
  • TTL相关策略:优先淘汰那些接近过期的键,适用于缓存场景,减少淘汰的数据对业务的影响。

配置示例:

假设你希望 Redis 在达到最大内存时采用 volatile-lru 策略,可以在 redis.conf 中配置:

maxmemory-policy volatile-lru

或者在运行时使用命令:

CONFIG SET maxmemory-policy volatile-lru

如何选择合适的策略?

  • 如果你希望最大化缓存命中率且不在意删除一些过期的数据,allkeys-lru 或 volatile-lru 会是不错的选择。
  • 如果你在乎删除的数据较为随机,可以考虑 allkeys-random 或 volatile-random
  • 如果你希望删除的键是即将过期的,使用 volatile-ttl 或 allkeys-ttl 会更合适。

选择合适的内存淘汰策略可以帮助你在内存管理上达到最佳的性能和资源利用效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/963220.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【python】python基于机器学习与数据分析的手机特性关联与分类预测(源码+数据集)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 python基于机器学习与数据分析的手机特性关联与分类…

Flutter_学习记录_Tab的简单Demo~真的很简单

1. Tab的简单使用了解 要实现tab(选项卡或者标签视图)需要用到三个组件: TabBarTabBarViewTabController 这一块,我也不知道怎么整理了,直接提供代码吧: import package:flutter/material.dart;void main() {runApp(MyApp());…

JavaScript中的数组方法总结+详解

在JS中,数组方法是非常重要且常用的方法.在此整理总结一番. 1. javaScript常用数组方法 2.方法详解 1.push(); 功能: 在数组最后一位添加一个或多个元素,并返回新数组的长度,改变原数组.(添加多个元素用逗号隔开) var arr [1, 2, "c"];var rel arr.push(&q…

蓝桥杯之c++入门(二)【输入输出(上)】

目录 前言1.getchar和 putchar1.1 getchar()1.2 putchar() 2.scanf和 printf2.1 printf2.1.1基本用法2.1.2占位符2.1.3格式化输出2.1.3.1 限定宽度2.1.3.2 限定小数位数 2.2 scanf2.2.1基本用法2.2.2 占位符2.2.3 scanf的返回值 2.3练习练习1&#xff1a…

[EAI-028] Diffusion-VLA,能够进行多模态推理和机器人动作预测的VLA模型

Paper Card 论文标题:Diffusion-VLA: Scaling Robot Foundation Models via Unified Diffusion and Autoregression 论文作者:Junjie Wen, Minjie Zhu, Yichen Zhu, Zhibin Tang, Jinming Li, Zhongyi Zhou, Chengmeng Li, Xiaoyu Liu, Yaxin Peng, Chao…

3.5.5 基于横盘结构的分析体系——缠论(走势类型)

走势 缠论中走势的定义如下: 包含一个中枢的走势——盘整 包含两个或多个中枢的走势——趋势 方向 趋势(两中枢或多中枢) 盘整(一中枢) 上涨 下跌 表1-8 盘整和趋势类型的走势理论图。 趋势和中枢 …

使用PyQt5绘制带有刻度的温度计控件

前言:进入学习Python开发上位机界面的第二阶段,学习如何开发自定义控件,从常用的控件入手学习,本期主要学习如何使用PyQt5绘制带有刻度的温度计控件。 1. 先找到一篇参考文章 参考文章:Qt编写自定义控件5-柱状温度计…

DIFY源码解析

偶然发现Github上某位大佬开源的DIFY源码注释和解析,目前还处于陆续不断更新地更新过程中,为大佬的专业和开源贡献精神点赞。先收藏链接,后续慢慢学习。 相关链接如下: DIFY源码解析

赛博算卦之周易六十四卦JAVA实现:六幺算尽天下事,梅花化解天下苦。

佬们过年好呀~新年第一篇博客让我们来场赛博算命吧! 更多文章:个人主页 系列文章:JAVA专栏 欢迎各位大佬来访哦~互三必回!!! 文章目录 #一、文化背景概述1.文化起源2.起卦步骤 #二、卦象解读#三、just do i…

「AI学习笔记」深度学习的起源与发展:从神经网络到大数据(二)

深度学习(DL)是现代人工智能(AI)的核心之一,但它并不是一夜之间出现的技术。从最初的理论提出到如今的广泛应用,深度学习经历了几乎一个世纪的不断探索与发展。今天,我们一起回顾深度学习的历史…

AIGC技术中常提到的 “嵌入转换到同一个向量空间中”该如何理解

在AIGC(人工智能生成内容)技术中,“嵌入转换到同一个向量空间中”是一个核心概念,其主要目的是将不同类型的输入数据(如文本、图像、音频等)映射到一个统一的连续向量空间中,从而实现数据之间的…

单细胞分析基础-第一节 数据质控、降维聚类

scRNA_pipeline\1.Seurat 生物技能树 可进官网查询 添加链接描述 分析流程 准备:R包安装 options("repos"="https://mirrors.ustc.edu.cn/CRAN/") if(!require("BiocManager")) install.packages("BiocManager",update = F,ask =…

【13】WLC HA介绍和配置

1.概述 本文对AireOS WLC的HA进行介绍,和大多数网络架构设计一样,单台的WLC是无法保证设备的冗余性的,而且WLC也不是双引擎的设备,所以需要依靠High Available的技术来为WLC提供高可用性。 2.WLC HA类型 AireOS WLC的高可用性技术可以分为N+1的SSO的HA。不是所有的设备都…

Alibaba开发规范_编程规约之命名风格

文章目录 命名风格的基本原则1. 命名不能以下划线或美元符号开始或结束2. 严禁使用拼音与英文混合或直接使用中文3. 类名使用 UpperCamelCase 风格,但以下情形例外:DO / BO / DTO / VO / AO / PO / UID 等4. 方法名、参数名、成员变量、局部变量使用 low…

【Elasticsearch 基础入门】Centos7下Elasticsearch 7.x安装与配置(单机)

Elasticsearch系列文章目录 【Elasticsearch 基础入门】一文带你了解Elasticsearch!!!【Elasticsearch 基础入门】Centos7下Elasticsearch 7.x安装与配置(单机) 目录 Elasticsearch系列文章目录前言单机模式1. 安装 J…

Gurobi基础语法之 addConstr, addConstrs, addQConstr, addMQConstr

在新版本的 Gurobi 中,向 addConstr 这个方法中传入一个 TempConstr 对象,在模型中就会根据这个对象生成一个约束。更重要的是:TempConstr 对象可以传给所有addConstr系列方法,所以下面先介绍 TempConstr 对象 TempConstr TempC…

深度学习可视化指标方法工具

1. TensorBoard 简介:由TensorFlow提供的可视化工具,现已支持多种深度学习框架。 功能: 图可视化:展示计算图结构,帮助理解模型架构。 标量仪表板:跟踪损失和准确率等指标的变化。 直方图仪表板&#xf…

【自开发工具介绍】SQLSERVER的ImpDp和ExpDp工具01

1、开发背景 大家都很熟悉,Oracle提供了Impdp和ExpDp工具,功能很强大,可以进行db的导入导出的处理。但是对于Sqlserver数据库只是提供了简单的图形化的导出导入工具,在实际的开发和生产环境不太可能让用户在图形化的界面选择移行…

小程序-视图与逻辑

前言 1. 声明式导航 open-type"switchTab"如果没有写这个,因为是tabBar所以写这个,就无法跳转。路径开始也必须为斜线 open-type"navigate"这个可以不写 现在开始实现后退的效果 现在我们就在list页面里面实现后退 2.编程式导航…

list的使用,及部分功能的模拟实现(C++)

目录(文章中"节点"和"结点"是同一个意思) 1. list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers 1.2.6 list…