首页 > 数据库 >Redis 过期删除与内存淘汰

Redis 过期删除与内存淘汰

时间:2023-09-12 17:22:34浏览次数:33  
标签:删除 过期 Redis 定期 内存 key

Redis 过期删除与内存淘汰

Redis 使用的过期删除策略是什么?

redis将有过期时间的key带上过期时间的时间戳保存到一个字典中。

主要分为两大类:

一个是惰性删除,不会主动检查key是否过期,cpu使用到的时候先检查是否过期,过期了删除,没有过期返回

一个是定期删除,会定期检查key是否过期

redis使用的是惰性+定期删除

惰性删除策略的优缺点

优点:不会影响很多性能

缺点:如果已经过期的key一直没用到,占用的内存不会释放,浪费内存

什么是定期删除策略?

会定期检查key是否过期,会随机抽一批key中检查是否过期,过期就删掉,如果删除的key大于25%,就会重复这个过程,指导比例小于25%,为了这个循环不会一直发生,增加了一个删除时间上限 25ms,如果超过25ms退出定期删除过程

定期删除策略优缺点

优点:减少内存浪费

缺点:定期删除频率难以掌握,低了导致过期key很多,高了影响性能

Redis 持久化时,对过期键会如何处理的?

  • rdb
    • 生成阶段,不保存过期key
    • 加载阶段,检查key是否过期,过期的话,如果是主库,不会加载,如果是从库,会加载
  • aof
    • 生成阶段:如果key过期,会添加del命令,删除key
    • 重写阶段:检查key是否过期,过期的key不会添加到数据库中

Redis 主从模式中,对过期键会如何处理?

如果是主库,会发送删除命令给从库

如果是从库,从库只会接收到删除命令才会删除过期key,不会主动删除

标签:删除,过期,Redis,定期,内存,key
From: https://www.cnblogs.com/xiuer211/p/17697262.html

相关文章

  • redis的持久化
    redis支持两种持久化方式RDB(RedisDatabase)和AOF(Appendonlyfile)。1.RDB a.在指定的时间将内存中的数据集快照写入磁盘,默认存储文件的名称为dump.rdb b.RDB文件是一个紧凑压缩的二进制文件 c.恢复大数据集的时候速度比AOF要快,适合数据备份和灾难恢复 d.何时产......
  • 【Flink系列十八】HDFS_DELEGATION_TOKEN过期的问题解决汇总
    问题类别Spark框架自身的问题Hadoop全家桶的问题开发者通过Hive,HDFS,HBASE访问HDFS的问题排查已知Hadoop-common-2.6.0的UGI存在bug,代码为HADOOP-10786,该问题在CDH发行版中已经修复,但Apache版本存在问题。已知HDFS也存在一个HDFS_DELEGATION_TOKEN过期的bug,代码为HDFS-9......
  • C语言 内存布局
    GCC编译预处理->编译->汇编->链接预处理:头⽂件包含、宏替换、条件编译、删除注释...编译:主要进⾏词法、语法、语义分析等,检查⽆误后将预处理好的⽂件编译成汇编⽂件...汇编:将汇编⽂件转换成⼆进制⽬标⽂件...链接:将项⽬中的各个⼆进制⽂件+所需的库+启动代码链接成可执⾏⽂......
  • Redis - 出现ERROR:WRONGTYPE Operation against a key holding the wrong kind of val
    原因:用的方法与redis服务器中存储数据的类型存在冲突。比如:有一个key的数据存储的是list类型的,但使用redis执行数据操作的时候却使用了非list的操作方法。 对一个Redis键执行不兼容的操作,这个错误通常发生在以下情况:1、类型不匹配:试图执行的操作与键存储的数据类型不匹配。例......
  • Redis 高效、安全的不停机数据迁移方案
    Redis是目前最流行的键值对存储数据库,凭借高性能和丰富的数据类型的特性,不仅可以作为缓存,还可以作为一个可持久化的数据库存储。随着业务的发展和版本的迭代,必然会遇到内存不足、集群节点不够和BUG等一系列问题。为了防止这些问题导致的系统故障,常常会把对内存、集群节点扩缩容......
  • Redis大揭秘:如何秒级存入百万数据?
    大家好,我是小米,一个热爱技术分享的小伙伴。最近在面试中遇到了一个有趣的问题:Redis里怎么快速存入百万数据?今天,我就来和大家分享一下这个有趣的问题,希望对大家有所帮助。Redis简介首先,让我们来简单了解一下Redis。Redis是一个高性能的键值存储系统,被广泛用于缓存、队列和实时分......
  • Docker中扩展容器内存
    使用Docker创建了一个容器,运行时显示是8G内存。现希望修改为64G内存。进入需要修改内存的容器:dockerexec-it容器名称/bin/bash进入容器之后,我们可以使用free命令查看当前内存使用情况,如:free-g#以GB为单位显示内存使用情况。如果需修改容器的内存,则需要在启动容器......
  • Redis从入门到放弃(2):数据类型
    Redis从入门到放弃(2):数据类型 在Redis中,数据以键值对的形式存储。Redis支持五种主要的数据类型,每种类型都有不同的用途和特性。本文将介绍Redis的五种数据类型:字符串(string),哈希(hash),列表(list),集合(set)和有序集合(sortedset)。1.字符串(String)介绍字符串是Redis中最基本的数据......
  • Redis从入门到放弃(1):安装配置
    Redis从入门到放弃(1):安装配置 1.介绍Redis是一个高性能的开源key-value数据库。它被广泛应用于缓存、会话存储、实时分析、消息队列等场景。Redis具有以下三个主要特点:数据持久化:Redis支持将内存中的数据保存到磁盘上,确保数据在断电或重启后不丢失。多样数据结构:除了支持......
  • tomcat 分配java内存
    //首先检查程序有没有限入死循环这个问题主要还是由这个问题java.lang.OutOfMemoryError:Javaheapspace引起的。第一次出现这样的的问题以后,引发了其他的问题。在网上一查可能是JAVA的堆栈设置太小的原因。跟据网上的答案大致有这两种解决方法:1、设置环境变量setJAVA_OPTS=-......