首页 > 系统相关 >数据过期删除策略与内存淘汰策略

数据过期删除策略与内存淘汰策略

时间:2024-02-28 23:11:09浏览次数:34  
标签:策略 删除 过期 键值 内存 key CPU

Redis 中提供了三种过期删除的策略

1)惰性删除
惰性删除,当一个键值对过期的时候,只有再次用到这个键值对的时候才去检查删除这个键值对,也就是如果用不着,这个键值对就会一直存在。

优点:对 CPU 是友好的,只有在取出键值对的时候才会进行过期检查,这样就不会把 CPU 资源花费在其他无关紧要的键值对的过期删除上。

缺点:如果一些键值对永远不会被再次用到,那么将不会被删除,最终会造成内存泄漏,无用的垃圾数据占用了大量的资源,但服务器却不能去删除。

2)定时删除
在设置某个 key 的过期时间,同时创建一个定时器,让定时器在该过期时间到来时,立即执行对其进行删除的操作。

优点:通过使用定时器,可以保证过期 key 可以被尽快的删除,并且释放过期 key 所占用的内存

缺点:对 CPU 是不友好的,当过期键比较多的时候,删除过期 key 会占用相当一部分的 CPU 资源,对服务器的响应时间和吞吐量造成影响。

3)定期删除

每隔一段时间执行一次删除(配置redis.conf 的hz选项,默认为10,1s刷新的频率。即1秒执行10次,100ms一次,值越大说明刷新频率越快,Redis性能损耗也越大)过期key操作。

定期删除是对上面两种删除策略的一种整合和折中。

每个一段时间就对一些 key 进行采样检查,检查是否过期,如果过期就进行删除

1、采样一定个数的key,采样的个数可以进行配置,并将其中过期的 key 全部删除;

2、如果过期 key 的占比超过可接受的过期 key 的百分比,则重复删除的过程,直到过期key的比例降至可接受的过期 key 的百分比以下。

优点:定期删除,通过控制定期删除执行的时长和频率,可以减少删除操作对 CPU 的影响,同时也能较少因过期键带来的内存的浪费。

缺点:

a、执行的频率不太好控制

b、频率过快对 CPU 不友好,如果过慢了就会对内存不太友好,过期的键值对不能及时的被删除掉

c、如果一个键值对过期了,但是没有被删除,这时业务再次获取到这个键值对,那就会获取到被删除的数据了,这肯定是不合理的

注意:上面讨论的三种策略,都有或多或少的问题。Redis 中实际采用的策略是惰性删除+定期删除的组合方式:定期删除,获取 CPU 和 内存的使用平衡,针对过期的 KEY 可能得不到及时的删除,当 KEY 被再次获取的时候,通过惰性删除再做一次过期检查,来避免业务获取到过期内容。

 

标签:策略,删除,过期,键值,内存,key,CPU
From: https://www.cnblogs.com/beatle-go/p/18042214

相关文章

  • 策略模式
    importtimeclassLocalStrategy:defexecute(self):print("thisisalocal104execute")classSaasStrategy:defexecute(self):print("thisisasaasexecute")classSwitch:def__init__(self,strategy......
  • (笔记)FPGA设计性能优化策略漫谈(一)--时序优化
    1   速度优化 1.1 关键路径重组FPGA逻辑设计中时序路径上的组合逻辑都会给路径增加延时,从而影响设计性能的往往只有几条关键的路径而已,所以可以通过减少关键路径上的组合逻辑单元数来减小该路径上的延时,从而达到优化的目的。关键路径重组技术多用于关键路径由多个路......
  • L-BFGS-B(Limited-memory Broyden–Fletcher–Goldfarb–Shanno )算法理解 —— 内存
    本文主要讲下个人对数值优化算法中几种常见算法的理解。什么是优化算法?给出函数f(X),现在要求minf(X)时的X值,这就是最优化问题。1.共轭梯度法方程:A*x=b,A矩阵为对称正定矩阵,b为向量,目标为求解出向量x。个人认为共轭梯度法并不能被当做是一个真正的优化算法,因为共轭梯度......
  • Redis内存被占满的解决办法
    1、增加内存。不推荐,因为即使加大内存,以后还是会有内存被占满的可能,不能根本解决问题。2、使用RedisCluster3、使用内存淘汰策略redis2.6+版本,redis.conf中的默认的策略是noeviction,一共有八种:  其中,LRU是LeastRecentlyUsed的缩写,即最近最少使用;LFU是LeastFrequent......
  • 内存分区
    内存一般分为四个区:堆区、栈区、全局区、代码区对于一个程序的编译而言,编译程序占用五个区:堆区、栈区、全局区、代码区、文字常量区堆区:程序员动态申请一定大小的内存空间,可读可写栈区:存放局部变量,函数参数,可读可写全局区:全局变量,静态变量(静态全局和静态局部)、静态函数、还分......
  • 1.交易策略概述
    量化交易策略的种类繁多,难以精确计数,因为新策略不断被发明,而旧策略也在不断演变。但可以将它们大致分为几个主要类别,以提供一个概览:趋势跟踪策略:利用市场趋势进行交易,比如动量策略。套利策略:利用市场中的价格差异来获利,如统计套利、对冲套利等。市场中性策略:设计以在各种市场......
  • 2.事件驱动策略介绍(1)
    (这篇文章介绍事件驱动交易是什么,它的原理和运作方式,适合股市新手和对此策略感兴趣的读者。) 事件驱动策略是一种量化交易策略,它专注于利用特定事件对金融市场或特定资产价格产生的影响来获利。这类策略认为,市场对于即将发生或已经发生的特定事件(如并购、财报发布、重大政策......
  • 只有 2G 内存, 如何排序 128G 数据?
    【外排序】只有2G内存,如何排序128G数据?在说明这个问题之前,先来回顾一项计组基础知识:CPU最多可以访问到内存,无法访问磁盘;因此一般的排序算法(如快速/归并/堆/希尔)都只能对至少可存储在内存中的数据进行排序,但现在需要面对的场景是数据量过大,无法放入内存,因......
  • 策略管理类
    //定义策略接口publicinterfaceStrategy<T>{/***策略标识**@return*/Tstrategy();}//定义策略管理器packagecom.serviceshare.springboot.strategy;importcom.serviceshare.springboot.SpringContextInitialize;importorg.springframework......
  • 2024-02-27-物联网系统编程(7- 共享内存)
    7.共享内存7.1共享内存概述​共享内存允许两个或者多个进程共享给定的区域共享内存的特点共享内存是进程间共享数据的一种最快的方法;一个进程向共享的内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。使用共享内存要注意的是多个进程之......