Redis的数据过期策略和数据淘汰策略

2025-02-12 17:50

本文主要是介绍Redis的数据过期策略和数据淘汰策略,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Redis的数据过期策略和数据淘汰策略》本文主要介绍了Redis的数据过期策略和数据淘汰策略,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一...

一、编程数据过期策略

Redis的key过期之后,会立即删除吗?

是否立即删除,这是根据Redis的数据javascript过期策略来决定的

Redis对数据设值数据的过期时间,数据过期后,就需要将数据从内存中删除掉。可以按照不同的规则进行删除,这些删除规则就被称之为数据的删除策略(数据过期策略)

Redis的过期策略分为以下两种策略

1、惰性删除

对Redis中的一个key设置过期时间之后,我们不去管他,当需要该key时,检查其是否已经过期,如果过期,就删掉它;反之则返回该key

# 举例:给name属性设置过期
set name zhangsan 10

# 过期后再获取,发现name过期了,直接删除key
get name

惰性删除优缺点:

优点:对CPU友好,对于很多用不到的key不用浪费时间进行过期检查

缺点:对内存不友好,如果一个key过期了,但是一直没尝试获取(没使用),那么不会察觉到这个key已经废弃了,就会一直保存在内存中,内存永远不会释放

2、定期删除

每隔一段时间,我们就对一些key(从一定数量的缓存中取出一部分key)进行检查,检查是否过期,过期则删除

定期策略有两种模式:

SLOW模式:定时任务,执行频率是10hz(1秒执行10次,也就是100ms执行一次),每次不超过25ms,可以通过修改配置寄文件redis.conf的hz选项调整这个频率

FAST模式:执行频率不固定,但是两次删除的间隔不会低于2ms,每次耗时不超过1ms

定期删除的优缺点:

优点:可以通过限制删除操作执行的时长和频率来减少删除操作对CPU的影响。另外定期删除,也能有效释放过期key对内存的占用

缺点:如果调的太快,可能影响CPU资源,一直检查key是否过期去了;调的太慢,又达不到效果

Redis的真实使用的过期删除策略实际上是:惰性删除 + 定期策略两种策略同时使用的

二、数据淘汰策略

1、数据淘汰策略概念

数据淘汰策略和数据淘汰策略概念不一样,可以认为是一种异常情况下的处理策略

数据淘汰策略指的是:当redis中的内存不够用时,此时再向redis中添加新的key(新数据),那么redis会按照一定规则将内存中的数据删掉,这种数据删除的规则被称之为内存的淘汰策略

2、8种数据淘汰策略

当内存不足时,redis支持以下8种数据淘汰策略来选择删除哪些key:(不用记得这么多,知道有默认的noeviction和LRU、LFU行了)

1、noeviction:当内存不足时,不淘汰任何key,但是也不允许写入新数据,默认是这种策略

2、volatile-ttl:对设置了TTL(过期时间)的key,比较这些key的TTL,过期剩余时间越小的,优先被淘汰

3、allkeys-random:从全体key中,随机进行淘汰(随机???删到那种《很长时间才能从数据库查出来的,又是热点key的》就老实了,直接缓存击穿)

4、volatile-random:对设置了TTL(过期时间)的key,随机进行淘汰

5、allkeys-lru:对全体key,基于LRU算法进行淘汰

6、volatile-lru:对设置了TTL(过期时间)的key,基于LRU算法进行淘汰

7、allkeys-lfu:对全体key,基于LFU算法进行淘汰

6、volatie-lfu:对设置了TTL(过期时间)的key,基于LFU算法进行淘汰

3、什么是LRU算法和LFU算法呢?

LRU(Least Recently Used):Least(最少的)Recently(最近)

最近最少使用:用当前时间,减去key的最后一次访问时间,这个值越大则淘汰优先级越高

举例:key1是3s前访问过一次,key2是9s前访问过一次,那么删除的就是key2

LFU(Least Frequently Used):Frequently(频繁的)

最少频率使用:统计每个key在一段时间内的访问频率,频率越小淘汰优先级越高。

举例:key1最近5s被访问了4次,key2最近5s被访问了9次,删除的就是key1

4、数据淘汰策略-使用建议

1、 优先使用 alkeys-lru 策略。充分利用 LRU 算法的优势,把最近最常访问的数据留在缓存中。如果业务有明显的冷热数据区分,建议使用。

2、如果业务中数据访问频率差别不大,没有明显冷热数据区分,建议使用alkeys-random,随机选择淘汰

3、如果业务中有置顶的需求,可以使用 volatile-lru 策略,同时置顶数据不设置过期时间,这些数据就一直不被删除会淘汰其他设置过期时间的数据。

4、如果业务中有短时高频访问的数据,可以使用 allkeys-lfu 或 volatile-lfu 策略。

举例:如果数据库中有1000万数据,redis中只能缓存20万条,那么如何保证redis中的数据都是热点数据呢?

使用allkey-lru策略,挑选最近最少使用的数据淘汰,留下来的肯定是最近最常访问的热点数据

我之前那家公司redis中保存的都是一些简单的配置项,并没有看到配置什么淘汰策略,应该用的就是默认的noevgdJhuBhmiction,内存占用极低,只用了几十MB

到此这篇关于Redis的数据过期策略和数据淘汰策略的文章就介绍到这了,更多相关Redis 数据过期策python略和数据淘汰策略内容请搜索编程China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!

这篇关于Redis的数据过期策略和数据淘汰策略的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

SQL中如何添加数据(常见方法及示例)

《SQL中如何添加数据(常见方法及示例)》SQL全称为StructuredQueryLanguage,是一种用于管理关系数据库的标准编程语言,下面给大家介绍SQL中如何添加数据,感兴趣的朋友一起看看吧... 目录在mysql中,有多种方法可以添加数据。以下是一些常见的方法及其示例。1. 使用INSERT I

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

Navicat数据表的数据添加,删除及使用sql完成数据的添加过程

《Navicat数据表的数据添加,删除及使用sql完成数据的添加过程》:本文主要介绍Navicat数据表的数据添加,删除及使用sql完成数据的添加过程,具有很好的参考价值,希望对大家有所帮助,如有... 目录Navicat数据表数据添加,删除及使用sql完成数据添加选中操作的表则出现如下界面,查看左下角从左

SpringBoot中4种数据水平分片策略

《SpringBoot中4种数据水平分片策略》数据水平分片作为一种水平扩展策略,通过将数据分散到多个物理节点上,有效解决了存储容量和性能瓶颈问题,下面小编就来和大家分享4种数据分片策略吧... 目录一、前言二、哈希分片2.1 原理2.2 SpringBoot实现2.3 优缺点分析2.4 适用场景三、范围分片