广告
返回顶部
首页 > 资讯 > 数据库 >Redis系列(五):Redis的过期键删除策略
  • 853
分享到

Redis系列(五):Redis的过期键删除策略

Redis系列(五):Redis的过期键删除策略 2014-11-06 09:11:14 853人浏览 无得
摘要

Redis的过期键删除策略。 本篇博客是Redis系列的第5篇,主要讲解下Redis的过期键删除策略。 本系列的前4篇可以点击以下链接查看: Redis系列(一):Redis简介及环境安装 Redis系

Redis系列(五):Redis的过期键删除策略

Redis的过期键删除策略。

本篇博客是Redis系列的第5篇,主要讲解下Redis的过期键删除策略。

本系列的前4篇可以点击以下链接查看:

Redis系列(一):Redis简介及环境安装

Redis系列(二):Redis的5种数据结构及其常用命令

Redis系列(三):Redis的持久化机制(RDB、AOF)

Redis系列(四):Redis的复制机制(主从复制)

划重点:Redis的过期键删除策略也是面试中经常会被问的,我最近面试,被问到了好几次。

对于Redis服务器来说,内存资源非常宝贵,如果一些过期键一直不被删除,就会造成资源浪费,

因此我们需要考虑一个问题:如果一个键过期了,它什么时候会被删除呢?

1. 常见的删除策略

常见的删除策略有以下3种:

  1. 定时删除

    在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间来临时,立即执行对键的删除操作。

  2. 惰性删除

    放任过期键不管,每次从键空间中获取键时,检查该键是否过期,如果过期,就删除该键,如果没有过期,就返回该键。

  3. 定期删除

    每隔一段时间,程序对数据库进行一次检查,删除里面的过期键,至于要删除哪些数据库的哪些过期键,则由算法决定。

其中定时删除和定期删除为主动删除策略,惰性删除为被动删除策略。

接下来我们一一讲解。

1.1 定时删除策略

定时删除策略通过使用定时器,定时删除策略可以保证过期键尽可能快地被删除,并释放过期键占用的内存。

因此,定时删除策略的优缺点如下所示:

  1. 优点:对内存非常友好
  2. 缺点:对CPU时间非常不友好

举个例子,如果有大量的命令请求等待服务器处理,并且服务器当前不缺少内存,如果服务器将大量的CPU时间用来删除过期键,那么服务器的响应时间和吞吐量就会受到影响。

也就是说,如果服务器创建大量的定时器,服务器处理命令请求的性能就会降低,

因此Redis目前并没有使用定时删除策略。

1.2 惰性删除策略

惰性删除策略只会在获取键时才对键进行过期检查,不会在删除其它无关的过期键花费过多的CPU时间。

因此,惰性删除策略的优缺点如下所示:

  1. 优点:对CPU时间非常友好
  2. 缺点:对内存非常不友好

举个例子,如果数据库有很多的过期键,而这些过期键又恰好一直没有被访问到,那这些过期键就会一直占用着宝贵的内存资源,造成资源浪费。

1.3 定期删除策略

定期删除策略是定时删除策略和惰性删除策略的一种整合折中方案。

定期删除策略每隔一段时间执行一次删除过期键操作,并通过限制删除操作执行的时长和频率来减少删除操作对CPU时间的影响,同时,通过定期删除过期键,也有效地减少了因为过期键而带来的内存浪费。

2. Redis使用的过期键删除策略

Redis服务器使用的是惰性删除策略和定期删除策略。

2.1 惰性删除策略的实现

过期键的惰性删除策略由expireIfNeeded函数实现,所有读写数据库的Redis命令在执行之前都会调用expireIfNeeded函数对输入键进行检查:

  • 如果输入键已经过期,那么将输入键从数据库中删除
  • 如果输入键未过期,那么不做任何处理

以上描述可以使用如下流程图表示:

2.2 定期删除策略的实现

过期键的定期删除策略由activeExpireCycle函数实现,每当Redis服务器的周期性操作serverCron函数执行时,activeExpireCycle函数就会被调用,它在规定的时间内,分多次遍历服务器中的各个数据库,从数据库的expires字典中随机检查一部分键的过期时间,并删除其中的过期键。

activeExpireCycle函数的大体流程为:

函数每次运行时,都从一定数量的数据库中随机取出一定数量的键进行检查,并删除其中的过期键,比如先从0号数据库开始检查,下次函数运行时,可能就是从1号数据库开始检查,直到15号数据库检查完毕,又重新从0号数据库开始检查,这样可以保证每个数据库都被检查到。

划重点:

  1. 关于定期删除的大体流程,最近面试时有被问道,我就是按上述描述回答的。
  2. 可能有的面试官还会问,每次随机删除哪些key呢?可以提下LRU算法(Least Recently Used 最近最少使用),一般不会再细问,不过有兴趣的同学可以深入研究下。

3. RDB对过期键的处理

3.1 生成RDB文件

在执行SAVE命令或者BGSAVE命令创建一个新的RDB文件时,程序会对数据库中的键进行检查,已过期的键不会被保存到新创建的RDB文件中

举个例子,如果数据库中包含3个键k1、k2、k3,并且k2已经过期,那么创建新的RDB文件时,程序只会将k1和k3保存到RDB文件中,k2则会被忽略。

3.2 载入RDB文件

在启动Redis服务器时,如果服务器只开启了RDB持久化,那么服务器将会载入RDB文件:

  • 如果服务器以主服务器模式运行,在载入RDB文件时,程序会对文件中保存的键进行检查,未过期的键会被载入到数据库中,过期键会被忽略。

  • 如果服务器以从服务器模式运行,在载入RDB文件时,文件中保存的所有键,不论是否过期,都会被载入到数据库中。

    因为主从服务器在进行数据同步(完整重同步)的时候,从服务器的数据库会被清空,所以一般情况下,过期键对载入RDB文件的从服务器不会造成影响。

4. AOF对过期键的处理

4.1 AOF文件写入

如果数据库中的某个键已经过期,并且服务器开启了AOF持久化功能,当过期键被惰性删除或者定期删除后,程序会向AOF文件追加一条DEL命令,显式记录该键已被删除。

举个例子,如果客户端执行命令GET message访问已经过期的message键,那么服务器将执行以下3个动作:

  1. 从数据库中删除message键
  2. 追加一条DEL message命令到AOF文件
  3. 向执行GET message命令的客户端返回空回复

4.2 AOF文件重写

在执行AOF文件重写时,程序会对数据库中的键进行检查,已过期的键不会被保存到重写后的AOF文件中

5. 复制功能对过期键的处理

在主从复制模式下,从服务器的过期键删除动作由主服务器控制

  • 主服务器在删除一个过期键后,会显式地向所有从服务器发送一个DEL命令,告知从服务器删除这个过期键。
  • 从服务器在执行客户端发送的读命令时,即使发现该键已过期也不会删除该键,照常返回该键的值。
  • 从服务器只有接收到主服务器发送的DEL命令后,才会删除过期键。

6. 源码及参考

黄健宏 《Redis设计与实现》

您可能感兴趣的文档:

--结束END--

本文标题: Redis系列(五):Redis的过期键删除策略

本文链接: https://www.lsjlt.com/news/5495.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Redis系列(五):Redis的过期键删除策略
    Redis的过期键删除策略。 本篇博客是Redis系列的第5篇,主要讲解下Redis的过期键删除策略。 本系列的前4篇可以点击以下链接查看: Redis系列(一):Redis简介及环境安装 Redis系...
    99+
    2014-11-06
    Redis系列(五):Redis的过期键删除策略
  • Redis的过期键删除策略原理说明
    目录惰性删除定期删除惰性删除策略定期删除策略的实现Redis服务器实际使用的是惰性删除和定期删除两种策略:通过配合使用这两种删除策略,服务器可以很好地在合理使用CPU时间和避免浪费内存空间之间取得平衡。 惰性删除 惰性删...
    99+
    2022-08-27
  • Redis(五):关于过期键(2)过期键的删除
    键虽然被设置了过期时间,但是当过期以后是如何处理的呢?通常有三种规则:定时删除:在设置了键的过期时间后,会启动一个计时器,当键的计时器到期就删除该键。惰性删除:不创建计时器,过期也不做处理,当再次读取该键的...
    99+
    2022-10-18
  • Redis中键的过期删除策略深入讲解
    如果一个键过期了,那么它什么时候会被删除呢? 这个问题有三种可能的答案,它们分别代表了三种不同的删除策略: 定时删除:在设置键的过期时间的同时,创建一个定时器( timer ). 让定时器...
    99+
    2022-10-18
  • Redis过期键删除策略的原理是什么
    这篇“Redis过期键删除策略的原理是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“R...
    99+
    2022-10-19
  • redis的过期删除策略怎么写
    在Redis中,有两种过期删除策略可以选择:1. 惰性删除策略(Lazy Expiration):当客户端尝试访问一个已过期的键时,...
    99+
    2023-08-20
    redis
  • Redis过期删除策略与内存淘汰策略
    目录过期删除策略设置Redis中key的过期时间 (单位:秒)常见的三种过期删除策略Redis使用用的过期删除策略Redis的定期删除的流程内存淘汰策略设置Redis最大运行内存Redis 内存淘汰策略有哪些?LRU 算...
    99+
    2022-09-02
  • 浅谈Redis中的内存淘汰策略和过期键删除策略
    目录8种淘汰策略过期键的删除策略总结 redis是我们现在最常用的一个工具,帮助我们建设系统的高可用,高性能。 而且我们都知道redis是一个完全基于内存的工具,这也是redis速...
    99+
    2022-11-12
  • redis key键过期删除策略及淘汰机制探究
    目录Redis过期删除删除策略淘汰机制redis过期删除 redis的键可以设置过期时间,但是并不是每个键一到过期时间就会立即删除,redis不可能给每个设置过期时间的key上添加一个定时器来监视是否过期,CPU根本承受...
    99+
    2023-11-17
    redis key键过期删除 redis key
  • Redis 的内存淘汰策略和过期删除策略的区别
    目录前言过期删除策略如何设置过期时间?如何判定 key 已过期了?过期删除策略有哪些?Redis 过期删除策略是什么?内存淘汰策略如何设置 Redis 最大运行内存?Redis 内存淘汰策略有哪些?LRU 算法和 LFU...
    99+
    2022-07-04
    Redis 内存淘汰策略 Redis 过期删除策略
  • Redis 的内存淘汰策略和过期删除策略的区别
    目录前言过期删除策略如何设置过期时间?如何判定 key 已过期了?过期删除策略有哪些?Redis 过期删除策略是什么?内存淘汰策略如何设置 Redis 最大运行内存?Redis 内存...
    99+
    2022-11-13
  • Redis的过期策略
    定时删除     在设置key的过期时间的同时,为该 key 创建一个定时器,让定时器在 key 的过期时间来临时对 key 进行删除。      优点:对内存友好      缺点:对 cpu 不友好 惰性删除     放任过...
    99+
    2018-07-09
    Redis的过期策略
  • Redis对于过期键的清除策略有哪些
    本篇内容主要讲解“Redis对于过期键的清除策略有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Redis对于过期键的清除策略有哪些”吧!PreRedis-17Redis内存回收策略Redi...
    99+
    2023-06-21
  • Redis 过期删除策略和内存淘汰机制
          Redis 设置过期时间 Redis 有四个不同的命令可以用于设置键的生存时间(键可以存在多久)或过期时间(键什么时候会被删除): EXPIRE ——将键 key 的生存时间设置为 ttl 秒。 PEXPIRE ——...
    99+
    2015-02-08
    Redis 过期删除策略和内存淘汰机制
  • 浅谈Redis对于过期键的三种清除策略
    目录PreRedis Key的超时设置处理被动删除主动删除当前已用内存超过maxmemory限定时,触发主动清理策略对于过期键一般有三种删除策略 定时删除:在设置键的过期时...
    99+
    2022-11-12
  • Redis中过期键怎么删除
    这篇“Redis中过期键怎么删除”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Redis中过期键怎么删除”文章吧。前言Red...
    99+
    2023-06-30
  • Redis的内存淘汰策略和过期删除策略有什么区别
    本文小编为大家详细介绍“Redis的内存淘汰策略和过期删除策略有什么区别”,内容详细,步骤清晰,细节处理妥当,希望这篇“Redis的内存淘汰策略和过期删除策略有什么区别”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧...
    99+
    2023-07-02
  • Redis的内存淘汰策略和过期删除策略的区别是什么
    这篇文章主要介绍“Redis的内存淘汰策略和过期删除策略的区别是什么”,在日常操作中,相信很多人在Redis的内存淘汰策略和过期删除策略的区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方...
    99+
    2022-10-19
  • Redis系列(六):设置/移除键的过期时间
    本篇博客是Redis系列的第6篇,主要讲解以下内容: 数据库数量 切换目标数据库 设置键的过期时间 移除键的过期时间 本系列的前5篇可以点击以下链接查看: Redis系列(一):Redis简介及环境安装 Redis系列(二):...
    99+
    2019-07-09
    Redis系列(六):设置/移除键的过期时间
  • 大家都应该知道的Redis过期键与过期策略
    今天,我和大家分享一篇关于 Redis 有关过期键的内容,主要有四个内容: 如何设置过期键 如何取消设置的过期时间 过期键的过期策略是怎样的 RDB、AOF 和复制对过期键的处理又是怎样的...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作