Redis缓存过期策略

文章目录

    • 一、面试题
    • 二、redis内存
      • 1. Redis的内存大小怎么查看?
      • 2. 设置redis内存
      • 3. redis内存的OOM
    • 三、redis内存淘汰策略
      • 1. redis的过期键删除策略
      • 2. redis缓存淘汰策略

一、面试题

1. 生产上你们redis内存设置多少?

2. 如何配置、修改redis内存大小?

3. 如果内存满了你怎么办?

4. redis清理内存的方式? 定期删除和惰性删除了解过吗?

5. redis缓存淘汰策略有哪些?分别是什么? 你用哪个?

6. redis的LRU了解过吗? 请手写LRU算法?

7. LRU和LFU的区别是什么?

二、redis内存

redis内存满了怎么办?

1. Redis的内存大小怎么查看?

打开redis配置文件,设置maxmemory参数,maxmemory是bytes字节类型,注意转化

在这里插入图片描述

我们可以看看redis默认的最大内存大小:

在这里插入图片描述

我们可以看到redis默认的内存大小为0,意思是如果我们不设置最大内存大小,0就表示不限制redis内存使用(在64位操作系统中,在32位机中redis默认能使用的最大内存是3GB)。

在实际生产中,我们推荐redis设置内存为最大物理内存的四分之三。

2. 设置redis内存

手动设置redis内存有两种方式,一种是直接在配置文件中修改,另一种是通过下面的命令修改:

#这种设置方式只是临时有效,重启后又会恢复原来配置文件的设置
config set maxmemory 104857600
  • 什么命令可以查询redis内存使用情况
info memory 
config get maxmemory

在这里插入图片描述

3. redis内存的OOM

如果redis超过了设置的最大值会怎么样?

在这里插入图片描述

上面的案例中我将redis的内存临时设置为1字节,然后插入一个key,发现报出了OOM异常

三、redis内存淘汰策略

redis里写的数据是怎么没了的?它如何删除?

1. redis的过期键删除策略

如果一个键是过期的,那它到了过期时间之后是不是马上就从内存中删除?

redis有三种不同的删除策略:

  • 立即删除

立即删除能保证内存中数据的最大新鲜度,因为它保证过期键值会在过期后马上删除,其所占用的内存也会随之释放,但是立即删除对cpu是不友好的,因为删除操作会占用cpu的时间,如果刚好碰上cpu很忙的时候,比如正在做交集或者排序等计算的时候,就会给cpu造成额外的压力。redis不可能时时刻刻遍历所有被设置了生存时间的key,来检测数据是否已经达到过期时间,然后对它进行删除,而且立即删除会产生大量的性能消耗,同时会影响数据的读取操作。

上面这种策略就是拿时间换空间的策略

  • 惰性删除

惰性删除是指,数据如果到达过期时间,先不做处理,等到下次访问数据的时候,再删除。如果一个键已经过期,而这个键又仍然保留在redis中,那么只要这个过期键不被删除,它所占用的内存就不会释放。使用惰性删除策略时,如果数据库中有非常多的键,而这些键又恰好没有被访问到的话,那么它们也许永远也不会被删除(除非用户手动执行FLUSHDB),我们甚至可以将这种情况看成一种内存泄露。

上面策略对内存是非常不友好的,开启惰性淘汰在redis中配置lazyfree-lazy-eviction=yes

  • 定期删除

上面两种方案都太极端,定期删除策略每隔一段时间执行一次删除过期键操作并通过限制删除操作执行时长和频率来减少删除操作对CPU的影响。

周期性轮询redis库中的时效性数据,采用随机抽取的策略,利用过期数据占比的方式控制删除频率

  • CPU性能占用设置峰值,检测频率自定义设置
  • 内存压力不是很大,长期占用内存的冷数据就被持续清理

总的来说,周期性抽查存储空间(随机抽查,重点抽查)

在这里插入图片描述
如果定期删除有些键一直没被抽查到,那么这个key会一直在内存中。

2. redis缓存淘汰策略

我们看配置文件:

在这里插入图片描述
可以看到有8种淘汰策略。

LRU:最近最少使用页面值换算法,淘汰最长时间未被使用的页面,看页面最后一次被使用到发生调度的时间长短,首先淘汰最长时间没有被使用的页面

LFU:最近最不常用页面值换算法,淘汰一定时期内被访问次数最少的页,看一定时间段内页面被使用的频率,淘汰一定时期内被访问次数最少的页

redis的内存淘汰策略:

  • noeviction:不会驱逐任何key,表示即使内存达到上限也不进行置换,所有能引(起内存增加的命令都会返回error(默认策略)
  • allkeys-lru:对所有key使用LRU算法进行删除,优先删除掉最近最不经常使用的key,用以保存新数据
  • volatile-lru:对所有设置了过期时间的key使用LRU算法进行删除
  • allkeys-random:对所有key随机删除
  • volatile-ttl:删除马上要过期的key
  • allkeys-Ifu:对所有kev使用LU算法进行删除
  • volatile-lfu:对所有设買了过期时间的key使用LFU算法进行删除

在这里插入图片描述

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

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

相关文章

YOLOV5 初体验:简单猫和老鼠数据集模型训练

1、前言 前两天,通过OpenCV 对猫和老鼠视频的抽取,提取了48张图片。这里不再介绍,可以参考之前的文章:利用OpenCV 抽取视频的图片,并制作目标检测数据集-CSDN博客 数据的目录如下: 项目的下载见文末 2、制…

基于Java的在线课程教学系统(Vue.js+SpringBoot)

目录 一、摘要1.1 系统介绍1.2 项目录屏 二、研究内容2.1 课程类型管理模块2.2 课程管理模块2.3 课时管理模块2.4 课程交互模块2.5 系统基础模块 三、系统设计3.1 用例设计3.2 数据库设计 四、系统展示4.1 管理后台4.2 用户网页 五、样例代码5.1 新增课程类型5.2 网站登录5.3 课…

第十一篇 - 应用于市场营销视频场景中的人工智能和机器学习技术 – Video --- 我为什么要翻译介绍美国人工智能科技巨头IAB公司(1)

IAB平台,使命和功能 IAB成立于1996年,总部位于纽约市。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司,互动广告局(IAB- the Interactive Advertising Bureau)自1996年成立以来,先后为700多家媒体…

为什么选择 Flink 做实时处理

优质博文:IT-BLOG-CN 为什么选择 Flink 【1】流数据更真实地反映了我们的生活方式(实时聊天); 【2】传统的数据架构是基于有限数据集的(Spark 是基于微批次数据处理); 【3】我们的目标&#xf…

ROS——ROS环境搭建

Ubuntu 安装完毕后,就可以安装 ROS 操作系统了,大致步骤如下: 配置ubuntu的软件和更新; 设置安装源; 设置key; 安装; 配置环境变量。 1.配置ubuntu的软件和更新 配置ubuntu的软件和更新,…

系统编程--makefile项目管理

这里写目录标题 介绍语法结构总览基础规则简介最简单的makefile对于基础规则的理解和应用总结 makefile时尽量使用更独立的命令,减少文件之间的耦合度需求以及解决总结 补充(关于makefile中脚本命令的编写顺序) 一级目录二级目录二级目录二级…

数据科学中的Python:NumPy和Pandas入门指南【第121篇—NumPy和Pandas】

数据科学中的Python:NumPy和Pandas入门指南 数据科学是当今数字时代中的一个重要领域,而Python是数据科学家们最喜爱的编程语言之一。在这篇博客中,我们将介绍Python中两个强大的库——NumPy和Pandas,它们在数据处理和分析中发挥…

java算法第十八天 | ● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404.左叶子之和

110.平衡二叉树 leetcode链接 思路: 使用后序遍历分别求左右子树的高度,若高度只差大于一,则返回-1,否则返回当前节点的最大高度。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* Tree…

爬虫(五)

1. 前端JS相关 三元运算 v1 条件 ? 值A : 值B; # 如果条件成立v1值A,不成立v1等于值Bres 1 1 ? 99 : 88 # res99特殊的逻辑运算 v1 11 || 22 # Ture v2 9 || 14 # 9 v3 0 || 15 # 15 v3 0 || 15 || "zhangfei" # 15赋值和…

x86 Ubuntu上编译eudev给龙芯loongarch64架构主机使用

1、下载eudev库eudev-master.zip,链接:eudev库官方地址 2、下载龙芯的交叉编译工具:loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.2.tar.xz,链接:龙芯交叉编译官方地址 3、交叉编译器环境搭建 (1)、…

latex绘图中\begin{figure}[htbp]中的htbp什么意思

在LaTeX中,\begin{figure}[htbp] 用来开始一个图形环境,其中 [htbp] 是一个位置参数,用来指导LaTeX如何放置这个图形。 具体来说,[htbp] 中的每个字母代表一个放置选项: h:代表“here”,意味着…

【LeetCode: 299. 猜数字游戏 - 模拟 + 计数】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

springcloud第3季 consul服务发现注册,配置中心2

一 consul的作用 1.1 为何使用注册中心 为何要用注册中心? 1.A服务调用B服务,使用ip和端口,如果B服务的ip或者端口发生变化,服务A需要进行改动; 2.如果在分布式集群中,部署多个服务B,多个服…

Linux(Ubuntu)中安装vscode

①首先去vscode的官网下载.deb文件 网址:https://code.visualstudio.com/docs/?dvlinuxarm64_deb 注:如果linux端无法打开网页下载文件,可以在Windows端下载好用WinSCP传输到Linux。下载前注意下你的系统架构是arm还是amd,系统…

常用的加密算法

AES 高级加密标准(AES, Advanced Encryption Standard)是当今世界范围内应用最广泛的对称加密算法之一。在微信小程序加密传输等场景中,AES算法发挥着至关重要的作用。对称加密算法的特点在于加密和解密过程使用相同的密钥。具体来说&#x…

【MybatisPlus】BaseMapper详解,举例说明

一、BaseMapper 简介 MyBatis-Plus 的核心类 BaseMapper 主要是用于提供基本的 CRUD(创建、读取、更新、删除)操作的接口定义。它是 MyBatis-Plus 框架中的一个重要组成部分,可以大大简化基于 MyBatis 的数据访问层代码的编写。 BaseMapper…

设计模式—桥接模式

定义: 桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interfce)模式。 本章代码:小麻雀icknn/设计模式练习 - Gitee.com 结构: 抽象化(Abstraction)角色&#xff1a…

MMCV报错

文章目录 mmcv1.x版本FAQ文档open-mmlab卸载环境中的mmcvImportError: cannot import name Config from mmcv (unknown location)problem description解决 ImportError: cannot import name mkdir_or_exist from mmcv.utils (unknown location)解决 AttributeError: module mmc…

如何通过隐藏服务器真实IP来防御DDOS攻击

我们知道,服务器对外提供服务,基本上都是放置在公网上的。所以说服务器放置在公网上会面临很多攻击,如果不做好必要的防护措施,服务器被人攻击只是时间上的问题。 而我们面临的众多攻击中,DDoS攻击是最常见同时也是影响…

企业AI转型之路:策略与实践

目录 前言1 试点项目:积累AI经验1.1 选择有实际价值的项目1.2 创新氛围的激发1.3 员工对新技术的接受度提升 2 建立高效的内部AI团队2.1 团队独立性与高层直报2.2 初期资金支持与资源整合 3 提供全面的AI培训计划3.1 针对不同层次的培训3.2 多样化培训形式3.3 内部人…