Redis缓存过期和和内存淘汰策略

news2024/11/16 21:43:43

目录

1、MaxMemory

2、Expire数据结构

3、删除策略

3.1、惰性删除

3.2、主动删除

3.3、缓存淘汰策略

​​​​​​​3.4、缓存淘汰策略的选择


1、MaxMemory

  • Redis作为DB使用时,为了保证数据的完整性,不允许淘汰任何键值对。
  • Redis作为缓存使用时,maxmemory默认为0,表示不限制最大内存。随着key-value越来越多,Redis性能会急剧下降。
  • 可以在redis.conf中通过maxmemory变量设置最大内存。
  • 可通过执行命令CONFIG GET maxmemory查看当前最大内存。
  • 设置maxmemory后,当趋近maxmemory时,通过缓存淘汰策略,从内存中删除对象

2、Expire数据结构

  • 通过expire命令设置key的存活时间:expire key ttl(单位秒)->设置key在ttl秒后失效。
  • 通过ttl命令查看key还有多久失效。-1:永久有效;-2:已失效。

        

        dict 用来维护一个 Redis 数据库中包含的所有 Key-Value 键值对,expires则用于维护一个 Redis 数据库中设置了失效时间的键(key与失效时间的映射)

        设置了失效时间的key和具体的失效时间全部都维护在 expires 这个字典表中

        当我们使用 expire命令设置一个key的失效时间时,Redis 首先到 dict 这个字典表中查找要设置的key是否存在,如果存在就将这个key和失效时间添加到 expires 这个字典表。

        当我们使用 setex命令向系统插入数据时,Redis 首先将 Key Value 添加到 dict 这个字典表中,然后将 Key 和失效时间添加到 expires 这个字典表中。

3、删除策略

        惰性删除、主动删除。

​​​​​​​3.1、惰性删除

        Redis 服务器不主动删除过期的键值,而是当访问键值时,再检查当前的键值是否过期,如果过期则执行删除并返回 null 给客户端;如果没过期则正常返回值信息给客户端。

        优点是不会浪费太多的系统资源,只是在每次访问时才检查键值是否过期。

        缺点是删除过期键不及时,造成了一定的空间浪费。

3.2、主动删除

  • FIFO(First In First Out,先进先出)

        根据缓存被存储的时间,离当前最远的数据优先被淘汰。

  • LRU(Least Recently Used,最近最少使用)

        根据最近被使用的时间,离当前最远的数据优先被淘汰。

        核心思想是如果数据最近被访问过,那么将来被访问的几率也更高

  • LFU(Least Frequently Used, 最不经常使用)

        在一段时间内,缓存数据被使用次数最少的会被淘汰。

        核心思想是“如果一个数据在最近一段时间内使用次数很少,那么在将来一段时间内被使用的可能性也很小”。

  • Random

        随机删除

  • Ttl

        从将要过期的数据集中选择数据删除。

3.3、缓存淘汰策略

当Redis节点分配的内存使用到达最大值以后,Redis会启动内存淘汰策略。

  • Volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰
  • Volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰
  • Volatile-random:从已设置过期时间的数据集中任意选择数据淘汰
  • Allkeys-lru:从所有键中,移除最近最少使用的key
  • Allkeys-random:从数据集中任意选择数据淘汰
  • No-eviction:不淘汰任何缓存,内存不足以容纳新写入数据时,写入操作报错。

volatile前缀的策略都是从已设置过期时间数据集中进行淘汰。

allkeys前缀的策略都是面向所有key进行淘汰。

LRU(least recently used)最近最少用到的。

​​​​​​​3.4、缓存淘汰策略的选择

  • allkeys-random:缓存数据没有明显的冷热之分,每个元素以相同的概率被访问
  • allkeys-lru/volatile-lru:数据有明显的冷热之分,希望将最常访问的数据留在缓存中

以上内容为个人学习理解,如有问题,欢迎在评论区指出。

部分内容截取自网络,如有侵权,联系作者删除。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

汇编语言与微机原理 期末半开卷复习整理(上)

8086CPU寄存器 8086:16位,4.77MHz~10MHz,16根数据线,20根地址线 AX/AL:乘除法指令中用作累加器,IO指令中用作数据寄存器,可显式或隐含调用 AH:在LAHF用作目的寄存器,隐含调用。 AL:…

大数据必学Java基础(一百一十一):过滤器注解应用和开发案例

文章目录 过滤器注解应用和开发案例 一、过滤器注解应用 二、开发案例

Python学习日记-第三十八天-生成器(第二节)

系列文章目录 使用greenlet,gevent完成多任务一、使用greenlet,gevent完成多任务 这里要先在pycharm里面提前安装好greenlet和gevent的包 操作: 代码: from greenlet import greenlet import timedef test1():while True:prin…

Android入门第39天-系统设置Configuration类

简介 本节给大家介绍的Configuration类是用来描述手机设备的配置信息的,比如屏幕方向, 触摸屏的触摸方式等。 Configuration给我们提供的方法列表 densityDpi:屏幕密度fontScale:当前用户设置的字体的缩放因子hardKeyboardHidd…

[深度学习] python基础支持汇总

这个系列放一些看神经网络源码过程中的python语法现象 文章目录前言一、list操作://extends/append的区别1.引入2.细致场景再现前言 例如:这个系列放一些看神经网络源码过程中的python语法现象, 直接解析语法太干瘪无聊.希望用这个方式来巩固所学知识 一、list操作…

电商评论文本情感分类(中文文本分类+中文词云图)(第一部分-textcnn)

电商评论文本情感分类(中文文本分类中文词云图) 第一部分 第二部分Bert部分 本项目包含: 1.中文文本处理 2.中文词云图绘制 3.中文词嵌入 4.基于textcnn的中文文本分类(Test_Acc89.2000) 5.基于bert的中文文本分类(Test_Acc0.…

ServiceComb场景及其原理

文章目录Java-ChassisEnableServiceComb初始化SCBSPIServiceUtils自定义SPI加载器职责链管理器FilterChainsManager/ConsumerHandlerManagerRpcSchema注册服务如何保活?RpcReferencePropertySourcesPlaceholderConfigurerThreadPoolExecutorEx/LinkedBlockingQueueE…

深刻理解JAVA并发中的有序性问题和解决之道

问题 Java并发情况下总是会遇到各种意向不到的问题,比如下面的代码: int num 0;boolean ready false; // 线程1 执行此方法 public void actor1(I_Result r) {if(ready) {r.r1 num num;} else {r.r1 1;} } // 线程2 执行此方法 public void actor…

Clickhouse 使用DBeaver连接

ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。 据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。 OLTP是传统的…

JavaWeb--JDBC核心技术

JavaWeb--JDBC核心技术JDBC核心技术第1章:JDBC概述1.1 数据的持久化1.2 Java中的数据存储技术1.3 JDBC介绍1.4 JDBC体系结构1.5 JDBC程序编写步骤第2章:获取数据库连接2.1 要素一:Driver接口实现类2.1.1 Driver接口介绍2.1.2 加载与注册JDBC驱…

Redis学习笔记(六)

哨兵 哨兵时一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的master,并将所有slave连接到新的master哨兵的作用 监控 不断检查master和slave是否正常运行master存活检测、master与slave运行情况检测 通…

Linux调度(三)——抢占式调度

目录 抢占式场景一: 抢占式场景二 抢占的时机 用户态的抢占时机 抢占式机一: 抢占时机二: 内核态的抢占时机 时机一 时机二 总结 之前讲了主动式调度,就是进程运行到一半,因为等待I/O等操作而主动让出CPU&a…

动态规划算法(3)(不同方案数问题+拆分问题)

文章目录不同路径不同路径II整数拆分不同的二叉搜索树动态规划解题五步走: 确定dp数组以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 不同路径 力扣传送门: https://leetcode.cn/problems/unique-paths/description/ 确定dp…

[附源码]JAVA毕业设计酒店订房系统(系统+LW)

[附源码]JAVA毕业设计酒店订房系统(系统LW) 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术&…

基于opencv答题卡识别基本处理_1

文章目录1.读取图片2.图片预处理2.1 原图转换为灰度图2.2 高斯滤波处理,去除噪声点2.3 增强亮度2.4 自适应二值化2.5 图片可视化3. 添加边框3.1 使用copyMakeBorder添加边框3.2 可视化图片查看效果3.3 手动截取答题卡区域1.读取图片 img cv2.imread(images/5.png)…

Nx C++程序使用spdlog库进行日志存储

1 spdlog简介 spdlog是一个开源的日志库,在github上有。代码见这里,文档这里 C语言的,支持Linux、windows等系统。 csdn上也有许多介绍,这里列举两个:1、2 2 使用 2.1下载编译链接 有多种使用方式,这里…

(三)沟通管理风险管理采购管理@相关方管理

沟通管理目录概述需求:设计思路实现思路分析1.沟通管理绩效报告提供资源2.管理沟通3.监督沟通风险管理规划风险管理识别风险定性风险分析:定量分析风险规划风险应对实施分享应对监督风险采购管理:12.1 规划采购的管理12.2 实施采购控制采购相…

ResNet网络的改进版:ResNeXt

之前的文章讲过ResNet网络的基本架构,其本质就是让网络的学习目的从学习转为学习,也就是学习输入和输出之间的残差信息,从而缓解了梯度消失和网络退化问题。 本文讲下ResNet网络的改进版:ResNeXt。 架构 下面是ResNet和ResNeXt的架…

9.2、面向对象高级特性(类方法和静态方法、property类属性、单例模式)

文章目录类方法和静态方法property类属性单例模式基于装饰器实现使用_ _ new _ _方法实现面向对象总结类方法和静态方法 类里面定义的方法称为实例方法,python解释器会自动将对象(或实例)传入方法【pycharm中会自动将self传入,se…

【机器学习】支持向量机【下】软间隔与核函数

有任何的书写错误、排版错误、概念错误等,希望大家包含指正。 在阅读本篇之前建议先学习: 【机器学习】拉格朗日对偶性 【机器学习】核函数 由于字数限制,分成两篇博客。 【机器学习】支持向量机【上】硬间隔 【机器学习】支持向量机【下】…