Redis03-过期策略和淘汰策略

news2024/11/27 21:02:57

目录

Redis数据过期策略

Redis数据淘汰策略


Redis数据过期策略

Redis使用一种基于过期策略来处理键的过期和自动失效。这种策略可以确保不再需要的数据被自动删除,以释放内存并避免数据过期后仍然在缓存中存留。

Redis的过期删除策略主要有两种:

  1. 惰性删除(Lazy Expiration):只在访问key的时候判断是否过期,如果过期就删除,不会主动检查。

    • 优点:对CPU友好,只在使用的时候检查是否过期。

    • 缺点:对内存不友好,即使过期了的Key也不会被删除,会浪费内存。

  2. 定期删除(TTL-Based Expiration):一段时间对数据库中的一些key进行检查,删除其中过期的key。

    定期删除有两种模式:

    SLOW模式是定时任务,执行频率是10hz(1秒10次),每次不超过25ms,可以通过redis.conf设置hz配置。

    FAST模式执行频率不固定,但两次间隔不低于2ms,每次耗时不超过1ms。

    • 优点:可以通过限制频率和时长减少删除操作对CPU的影响,定期删除也可以减少内存的占用。

    • 缺点:删除操作的频率和时长难以确定,短了消耗CPU,长了和惰性删除差不多,浪费内存。

Redis数据淘汰策略

Redis支持多种数据淘汰策略,用于管理内存中的数据,以便在内存不足时删除部分数据。

LRU(Least Recently Used,最近最少使用):当内存不足时,Redis会优先删除最久未被访问的键。

LFU(Least Frequently Used,最不经常使用):Redis会在内存不足时删除访问频率最低的键。

TTL(Time To Live,生存时间):当键的生存时间过期时,Redis会自动删除该键。

以下是Redis中常见的8种数据淘汰策略:

# MAXMEMORY POLICY: how Redis will select what to remove when maxmemory
# is reached. You can select one from the following behaviors:
#
# volatile-lru -> Evict using approximated LRU, only keys with an expire set.
# allkeys-lru -> Evict any key using approximated LRU.
# volatile-lfu -> Evict using approximated LFU, only keys with an expire set.
# allkeys-lfu -> Evict any key using approximated LFU.
# volatile-random -> Remove a random key having 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.
  1. noeviction:不淘汰任何key,当内存满时不允许写入新数据。这是默认策略。(内存不足会报错的)

  2. volatile-ttl:对设置了TTL的key,计算剩余TTL值,越小的先被淘汰。

  3. volatile-lru:对设置了TTL的key,基于LRU算法进行淘汰。

  4. allkeys-lru:对所有的key,基于LRU算法进行淘汰。

  5. volatile-lfu:对设置了TTL的key,基于LFU算法进行淘汰。

  6. allkeys-lfu:对所有的key,基于LFU算法进行淘汰。

  7. volatile-random:对设置了TTL的key,随机淘汰。

  8. allkeys-random:对所有的key,随机淘汰。

使用建议:

  • 业务对缓存的数据有冷热数据区分的时候,建议使用allkeys-lru删除最久未被访问的key的策略。

  • 业务没有冷热数据区分,使用allkeys-random就行。

  • 业务中有置顶要求,可以设置volatile-lru,对置顶数据不设过期时间,这些数据就会一直保留。

  • 业务中有频率要求,可以使用volatile-lfu或者allkeys-lfu策略。

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

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

相关文章

【MySQL数据库】 四

本文主要介绍了mysql数据库的几种常见的约束. 一.数据库约束 我们希望存储的数据是靠谱的,mysql提供一些机制来辅助我们自动的依赖程序对数据进行检查 . 这类查数据的机制,就是约束 一旦约束好了,后续在进行增 删 改的时候,mysql就会自动的对修改的数据做出检查,如果不符合…

并发编程: 2. 线程管控

给定一个线程,只要令std::thread对象与之关联,就能管控该线程的几乎每个细节。 2.1 线程的基本管控 2.1.1 发起线程 线程通过构建std::thread对象而启动,该对象指明线程要运行的任务(函数)。简单的任务,…

【大数据】NiFi 中的重要术语

NiFi 中的重要术语 1.Flow Controller2.Processor3.Connection4.Controller Service5.Process Group6.FlowFile 那些一个个黑匣子称为 Processor,它们通过称为 Connection 的队列交换名为 FlowFile 的信息块。最后,FlowFile Controller 负责管理这些组件…

隐私安全|隐私安全已从国家法律法规转向商业企业应用,如何理解以及落地建设,相信大家正在经历隐私安全的困扰

网络空间的隐私安全主要是指网络隐私权不受侵犯,网络隐私权是指自然人在网上享有的,与公共利益无关的个人活动领域与个人信息秘密依法受到保护,不被他人非法侵扰,知悉收集,利用和公开的一种人格权,也包括第…

基于鹰栖息算法的无人机航迹规划-附代码

基于鹰栖息算法的无人机航迹规划 文章目录 基于鹰栖息算法的无人机航迹规划1.鹰栖息搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用鹰栖息算法来优化无人机航迹规划。 1.鹰栖息…

ActiveMq学习⑧__ActiveMQ的消息持久化机制

ActiveMQ的消息存储和持久化 MQ的高可用 事务持久签收可持久化 (类似于与mq消息的同步机制) 为了避免意外宕机以后丢失信息,需要做到重启后可以恢复消息队列,消息系统一半都会采用持久化机制。 ActiveMQ的消息持久化机制 Act…

canvas实现刮奖功能

canvas刮奖原理很简单,就是在刮奖区添加两个canvas,第一个canvas用于显示刮开后显示的内容,可以是一张图片或一个字符串,第二个canvas用于显示涂层,可以用一张图片或用纯色填充,第二个canvas覆盖在第一个ca…

逆向学习记录(5)刷机

首要前提:手机刷机必须OEM解锁(BL解锁),否则不能刷机! 1、根据手机机型下载手机系统包,首次登陆网址需要同意协议。然后在右侧选机型,中间就出来各种适合本机型的系统。 下载网址 https://dev…

47基于matlab的水印提取,将水印和载体进行图像融合

基于matlab的水印提取,将水印和载体进行图像融合,成为一体,可对合成图像进行加噪处理,剪切处理,小波压缩处理,旋转处理等操作,最后对合成图像实现水印提取,程序已调通,可…

【AI好好玩02】利用Lama Cleaner本地实现AIGC试玩:擦除对象、替换对象、更换风格等等

目录 一、安装二、擦除功能1. LaMa模型实操实例一:去除路人实操实例二:去水印实操实例三:老照片修复 2. LDM模型3. ZITS模型4. MAT模型5. FcF模型6. Manga模型 三、替换对象功能1. sd1.52. sd23. anything44. realisticVision1.45. 四个模型的…

Tomcat安装配置教程

目录 1、安装tomcat1.1、查看JDK版本1.2、 匹配对应的JDK版本1.3、 下载Tomcat1.3.1、 安装包版(推荐,不用配环境)1.3.2、 压缩包版 2、 运行Tomcat3、 不能运行问题 1、安装tomcat 1.1、查看JDK版本 由于不同版本tomcat对于jdk的版本有要求…

Mac 下安装golang环境

一、下载安装包 安装包下载地址 下载完成,直接继续----->下一步到结束即可安装成功; 安装成功之后,验证一下; go version二、配置环境变量 终端输入vim ~/.zshrc进入配置文件,输入i进行编辑 打开的不管是空文本…

redis教程 二 redis客户端Jedis使用

文章目录 Redis的Java客户端-JedisJedis快速入门创建工程:引入依赖:建立连接测试:释放资源Jedis连接池创建Jedis的连接池改造原始代码 Redis的Java客户端-SpringDataRedis快速入门导入pom坐标配置文件测试代码 数据序列化器StringRedisTempla…

“第六十一天”

这三个也算一类的,减和加的处理差不多,不过这个题多了限制是被减数大于减数,要是想再完整一点,可以把小于的情况也考虑进去,不过这个我是如果被减数小于减数的话,我就用减数加被减数,然后最后打…

JVM 各个参数详解

在一些规模稍大的应用中,Java虚拟机(JVM)的内存设置尤为重要,想在项目中取得好的效率,GC(垃圾回收)的设置是第一步。 PermGen space:全称是Permanent Generation space.就是说是永久…

ActiveMq学习⑤__ActiveMq的Broker

ActiveMq的Broker 是什么? 相当于一个ActiveMq的服务器实例 Broker其实就是实现了用代码的形式启动ActiveMQ将MQ嵌入到Java 代码中,以便随时用随时启动,在用的时候再去启动这样节省了资源,也保证了可靠性。 按照不同的配置文件…

线程的创建、等待、退出

多线程开发在Linux平台上已经有成熟的pthread库支持,所以使用pthread库在编译时要加上-pthread。其设计的多线程开发的基本概念主要包含3点:线程、互斥锁、条件。其中线程操作又分线程的创建、退出、等待三种。互斥锁包含4种操作,分别是创建、…

线程同步——互斥量解锁、解锁

类似与进程间通信信号量的加锁解锁。 对互斥量进行加锁后,任何其他试图在此对互斥量加锁的线程都会被阻塞,直到当前线程释放该互斥锁。如果释放互斥锁时有多个线程被阻塞,所有在该互斥锁上的阻塞线程都会变成可运行状态,第一个变…

《算计》

第一章:机器的诞生 在一个科技高度发达的未来世界,人类社会已经进入了自主机器时代。人们创造出了一种名为“超级自主机器(Super Autonomous Machine,简称SAM)”的全新型机器,它拥有无限的智慧和学习能力&a…

LeetCode.6 N字形变换

一开始想的是真的创建一个数组 去按照题目所给的要求填入数据 最后输出不为空的数组项 但是不仅时间复杂度高 而且错误频繁出现 最终也没有提交成功 查阅题解后发现数组并不重要 假设我们忽略掉数组中的那些空白项 最终输出的结果就是numRows行的字符串的拼接 string conver…