我的编程空间,编程开发者的网络收藏夹
学习永远不晚

浅谈Redis中的内存淘汰策略和过期键删除策略

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

浅谈Redis中的内存淘汰策略和过期键删除策略

redis是我们现在最常用的一个工具,帮助我们建设系统的高可用,高性能。

而且我们都知道redis是一个完全基于内存的工具,这也是redis速度快的一个原因,当我们往redis中不断缓存数据的时候,其内存总有满的时候(而且内存是很贵的东西,尽量省着点用),所以尽可能把有用的数据,或者使用频繁的数据缓存在redis中,物尽其用。

那么如果正在使用的redis内存用完了,我们应该怎么取舍redis中已存在的数据和即将要存入的数据呢,我们要怎么处理呢?

redis官方提供了8种不同的淘汰策略

redis.conf 是个好东西,几乎redis的所有配置都可以在这里找到,根据conf中的说明也就能操作了

我们看下redis.conf中关于8中淘汰策略的说明(本文使用redis版本是4.0.9)


volatile-lru -> Evict using approximated LRU among the keys with an expire set.
allkeys-lru -> Evict any key using approximated LRU.
volatile-lfu -> Evict using approximated LFU among the keys with an expire set.
allkeys-lfu -> Evict any key using approximated LFU.
volatile-random -> Remove a random key among the ones with an expire set.
allkeys-random -> Remove a random key, any key.
volatile-ttl -> Remove the key with the nearest expire time (minor TTL)
noeviction -> Don't evict anything, just return an error on write operations.

# LRU means Least Recently Used(最近最少使用的,时间)
# LFU means Least Frequently Used(最不经常使用的,次数)
# The default is:
maxmemory-policy noeviction

上文是从redis.conf中摘出来关于淘汰策略的8种配置以及设置说明,其中maxmemory-policy noeviction 代表了淘汰策略默认的是noeviction,我们可以根据自己的业务需求修改合适的策略。
英文看不懂的看下面的中文

8种淘汰策略

  • volatile-lru:在设置过期时间的数据中淘汰最少使用的数据。
  • allkeys-lru:在所有的数据中淘汰最少使用的数据。
  • volatile-lfu:在设置过期时间的数据中淘汰使用频率最低的数据。
  • allkeys-lfu:在所有的数据中淘汰使用使用频率最低的数据。
  • volatile-random:在设置过期时间的数据中淘汰任意随机数据。
  • allkeys-random:在所有的数据中随机淘汰数据。
  • volatile-ttl:在设置过期时间的数据中淘汰最早过期的数据。
  • noeviction:默认策略,不淘汰数据,新增或者修改数据会抛异常,但是读操作正常进行,不受影响

上面是内存不足的淘汰策略,还有一种是过期键的删除策略,两者是不同,不要搞混了

过期键的删除策略

  • 定时过期:每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除。该策略可以立即清除过期的数据,对内存很友好;但是会占用大量的CPU资源去处理过期的数据,从而影响缓存的响应时间和吞吐量。
  • 惰性过期:只有当访问一个key时,才会判断该key是否已过期,过期则清除。该策略可以最大化地节省CPU资源,却对内存非常不友好。极端情况可能出现大量的过期key没有再次被访问,从而不会被清除,占用大量内存。
  • 定期过期:每隔一定的时间,会扫描一定数量的数据库的expires字典中一定数量的key,并清除其中已过期的key。该策略是前两者的一个折中方案。通过调整定时扫描的时间间隔和每次扫描的限定耗时,可以在不同情况下使得CPU和内存资源达到最优的平衡效果。

expires字典会保存所有设置了过期时间的key的过期时间数据,其中,
key是指向键空间中的某个键的指针,
value是该键的毫秒精度的UNIX时间戳表示的过期时间。
键空间是指该Redis集群中保存的所有键。

总结

Redis的内存淘汰策略的选取并不会影响过期的key的处理。内存淘汰策略用于处理内存不足时的需要申请额外空间的数据;过期策略用于处理过期的缓存数据。

到此这篇关于浅谈Redis中的内存淘汰策略和过期键删除策略的文章就介绍到这了,更多相关Redis内存淘汰和过期键删除内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

浅谈Redis中的内存淘汰策略和过期键删除策略

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

下载Word文档

猜你喜欢

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

文章前言提到内存管理,我们就需要考虑Redis的内存过期策略和内存淘汰机制。该文章便从这两方面入手,分享一些在Redis内存方面相关的基础知识。文章中使用的示例版本为Redis5.0版本。内存过期策略内存过期策略主要的作用就是,在缓存过期之后,能够及时的将失效
Redis的过期策略和内存淘汰策略
2020-12-25

Redis 的内存淘汰策略和过期删除策略的区别

目录前言过期删除策略如何设置过期时间?如何判定 key 已过期了?过期删除策略有哪些?Redis 过期删除策略是什么?内存淘汰策略如何设置 Redis 最大运行内存?Redis 内存淘汰策略有哪些?LRU 算法和 LFU 算法有什么区别?总
2022-07-04

Redis 过期删除策略和内存淘汰机制

Redis 设置过期时间Redis 有四个不同的命令可以用于设置键的生存时间(键可以存在多久)或过期时间(键什么时候会被删除):EXPIRE ——将键 key 的生存时间设置为 ttl 秒。PEXPIRE ——将键 key 的生存时间设置为 ttl 毫秒
Redis 过期删除策略和内存淘汰机制
2015-02-08

Redis的内存淘汰策略和过期删除策略有什么区别

本文小编为大家详细介绍“Redis的内存淘汰策略和过期删除策略有什么区别”,内容详细,步骤清晰,细节处理妥当,希望这篇“Redis的内存淘汰策略和过期删除策略有什么区别”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧
2023-07-02

Redis中的过期删除策略和内存淘汰机制是什么

这篇文章主要讲解了“Redis中的过期删除策略和内存淘汰机制是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redis中的过期删除策略和内存淘汰机制是什么”吧!Redis 中 key 的
2023-06-29

Redis的过期策略和内存淘汰策略最全总结与分析

文章前言提到内存管理,我们就需要考虑Redis的内存过期策略和内存淘汰机制。该文章便从这两方面入手,分享一些在Redis内存方面相关的基础知识。文章中使用的示例版本为Redis5.0版本。内存过期策略内存过期策略主要的作用就是,在缓存过期之后,能够及时的将失效
Redis的过期策略和内存淘汰策略最全总结与分析
2016-07-21

redis key键过期删除策略及淘汰机制探究

目录Redis过期删除删除策略淘汰机制redis过期删除redis的键可以设置过期时间,但是并不是每个键一到过期时间就会立即删www.cppcns.com除,redis不可能给每个设置过期时间的key上添加一个定时器来监视是否过期,CPU
redis key键过期删除策略及淘汰机制探究
2023-11-17

Redis过期键与内存淘汰策略深入分析讲解

目录一、Redis数据库的组织方式1.1 redisServer结构定义1.2 redisDb 结构定义1.3 redisdb初始化二、过期键2.1 设置键的过期时间2.2 过期键的判定2.3 过期键的删除策略2.3.1 惰性删除的实现2.
2022-11-28

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

Redis的过期键删除策略。 本篇博客是Redis系列的第5篇,主要讲解下Redis的过期键删除策略。本系列的前4篇可以点击以下链接查看:Redis系列(一):Redis简介及环境安装Redis系列(二):Redis的5种数据结构及其常用命令Re
Redis系列(五):Redis的过期键删除策略
2014-11-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录