首页 > 数据库 >redis自学(25)过期策略

redis自学(25)过期策略

时间:2024-03-28 17:14:25浏览次数:27  
标签:25 删除 过期 redis 内存 key 执行

Redis内存回收

Redsi之所以性能强,最主要的原因就是基于内存存储。然而但决断的redis其内存大小不宜过大,会影响持久化或者主从同步性。

我们可以通过修改配置文件来设置redis的最大内存:

 

 

当内存使用达到上限时,就无法存储更多数据了

过期策略

在学习redis缓存的时候我们说过,可以通过expire命令给redis的key设置TTL(存活时间):

 

 

可以发现,当key的TTL到期以后,再次访问name返回的nil,说明这个key已经不存在了,对应的内存也得到释放。从而起到内存回收的目的。

这里有两个问题需要我们思考:

① Redis是如何知道一个key是否过期呢?

ü 利用两个Dict分别记录key-value对以及key-ttl对

② 是不是TTL到期就立即删除了呢?

ü 惰性删除

ü 周期删除

过期策略-DB结构

Redis本身是一个典型的key-value内存存储数据库,因此所有的key、value都保存在之前学习过的Dict结构中。不过在其database结构体中,有两个Dict:一个用来记录key-value;另一个用来记录key-TTL。

 

 

 

 

过期策略-惰性删除

惰性删除:顾名思义并不是在TTL到期后就立刻删除,而是在访问一个key的时候,检查该key的存活时间,如果已经过期才执行删除。

 

 

 

 

问题在于,如果一直不访问这个key,那么就永远不可能会删除。

过期策略-周期删除

周期删除:顾名思义是通过一个定时任务,周期性的抽样部分过期的key,然后执行删除。执行周期有两种:

Redis会设置一个定时任务serverCorn(),按照server.hz的频率来执行过期key清理,模式为SLOW

 

 

Redis的每个事件循环前会调用beforeSleep()函数,执行过期key清理,模式为FAST

 

 

 

 

Fast是高频少量的清理,最多不超过1毫秒

SLOW模式是低频长时间的清理,清理效果会更好一些,但是会阻塞几十毫秒影响效率

 

SLOW模式规则:

① 执行频率受server.hz影响,默认为10,即每秒执行10次,每个执行周期100ms

② 执行清理耗时不超过一次执行周期的25%,剩下的时间什么也不做,确保执行频率固定,不会对主线程造成太多影响

③ 逐个遍历db,逐个遍历db中的bucket,抽取20个key判断是否过期

④ 如果没达到时间上线(25ms)并且过期key比例大于10%,再进行一次抽样,否则结束

FAST模式规则(过期key比例小于10%不执行):

① 执行频率受beforeSleep()调用频率影响,但两次FAST模式间隔不低于2ms

② 执行清理耗时不超过1ms

③ 逐个遍历db,逐个遍历db中的bucket,抽取20个key判断是否过期

④ 如果没达到时间上线(1ms)并且过期key比例大于10%,再进行一次抽样,否则结束

 

标签:25,删除,过期,redis,内存,key,执行
From: https://www.cnblogs.com/bulesea/p/18102137

相关文章

  • 【Redis】redis哨兵模式
    概述RedisSentinel,即Redis哨兵,在Redis2.8版本开始引入。它是Redis高可用的实现方案之一。Sentinel是一个管理多个Redis实例的工具,它的核心功能是可以实现对Redis的监控、通知、自动故障转移。监控(Monitoring):哨兵会不断地检查主节点和从节点是否运作正常。自动故障转移(Au......
  • 3.25~3.28
    另:?咋写这玩意的时候突然耳鸣了几秒我不会要趋势了吧(我发现和5k聊题总会出点问题倒不是说听不懂他的思路而是出在一些奇奇怪怪的地方......
  • Drools业务规则管理系统25_Drools入门案例3
    一、业务场景说明业务场景:消费者在图书商城购买图书,下单后需要在支付页面显示订单优惠后的价格。具体优惠规则如下:二、开发实现1、导入核心依赖<dependency><groupId>org.drools</groupId><artifactId>drools-compiler</artif......
  • etcd与redis之间的区别
    一、简介我们之前用了redis,那么好用为什么还要来用etcd呢,这里就来和大家聊聊为什么有的业务场景选择etcd。分析:在当今的分布式系统中,数据存储及一致性相当重要。etcd和redis都是我们最受欢迎的开源分布式数据存储的解决方案,但是他们有着不同的试用场景。下面我个人对其中二个的......
  • Drools业务规则管理系统25_规则引擎概述2
    一、什么是规则引擎规则引擎,全称为业务规则管理系统,英文名为BRMS(即BusinessRuleManagementSystem)。规则引擎的主要思想是将应用程序中的业务决策部分分离出来,并使用预定义的语义模块编写业务决策(业务规则),由用户或开发者在需要时进行配置、管理。需要注意的是规则引擎并......
  • [转帖]PCIe7.0宣布即将2025推出
    https://zhuanlan.zhihu.com/p/532935941 jiu导言在2022年的PCI-SIG的开发者大会上,PCI-SIG总裁庆祝了PCI-SIG成立30周年并宣布PCIe技术的下一代技术展望,并且计划在2025年向成员发布PCIe7.0标准。而在未来3年中即将推出的PCIe7.0再次提供速度提升(相比较PCIe6.0翻倍,X16双......
  • 怎样去保证 Redis 缓存与数据库双写一致性?
    解决方案那么我们这里列出来所有策略,并且讨论他们优劣性。先更新数据库,后更新缓存先更新数据库,后删除缓存先更新缓存,后更新数据库先删除缓存,后更新数据库先更新数据库,后更新缓存    这种方法是不推荐使用的,因为在更新缓存那一步有的业务需求缓存中的值并不是从数据......
  • 如何实现Redis集群的高可用性
    在实际应用中,确保Redis集群的高可用性是至关重要的。以下是一些常见的实现高可用性的方法和相关代码示例。1、主从复制(Master-SlaveReplication):原理:主节点负责处理数据写入操作,而从节点则从主节点复制数据。这样,即使主节点发生故障,从节点可以升级为主节点,继续提供服务......
  • Redis的相关配置
    #bind 127.0.0.1                   #注释掉这一句,使redis可以外部访问port 6379                         #默认端口,可以改成别的端口protected-mode yes                #修改为yes,开启保护模式,默认是yes#daem......
  • Redis 红锁:分布式锁的强大实现
    在分布式系统中,多个进程或线程可能需要并发访问共享资源。为了确保数据的一致性和正确性,我们需要一种分布式锁机制来协调这些访问。Redis红锁就是这样一种强大的分布式锁实现。一、分布式锁的概念分布式锁是一种用于在分布式系统中实现资源互斥访问的机制。它的目的是确......