Redis 删除策略的三种实现

 更新时间:2023年06月21日 09:18:50   作者:Doker 多克  
本文主要介绍了Redis 删除策略的三种实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

Redis中的数据删除策略包括定:时删除、惰性删除、定期删除

一、Redis过期时间设置

Redis提供了四个命令来设置过期时间(生存时间)。

  • EXPIRE :表示将键 key 的生存时间设置为 ttl 秒。
  • PEXPIRE :表示将键 key 的生存时间设置为 ttl 毫秒。
  • EXPIREAT :表示将键 key 的生存时间设置为 timestamp 所指定的秒数时间戳。
  • PEXPIREAT :表示将键 key 的生存时间设置为 timestamp 所指定的毫秒数时间戳。

二、定时删除

  • 当key设置有过期时间,且过期时间到达时,立即执行key的删除操作
  • 优点:节约内存,到时就删除,立即释放不必要的内存占用
  • 缺点:CPU压力较大,无论CPU此时负载量多高,均占用CPU,会影响redis服务器响应时间和指令吞吐量
  • 总结:用处理器性能换取存储空间(时间换空间),适用于小内存,强CPU场景

三、惰性删除 (空间换时间)

数据到达过期时间,先不做处理。等下次访问该数据时,发现数据已过期,删除,给客户端返回不存在。

  • 优点:节约CPU性能,发现不得不删除的时候才删除
  • 缺点:内存空间压力很大,出现长期占用内存的数据
  • 总结:用存储空间换取处理器性能 (空间换时间),适用于大内存,弱CPU场景

四、 定期删除(中和以上两种方案)

由redis.c/activeExpireCycle 函数实现,函数以一定的频率运行,每次运行时,都从一定数量的数据库中取出一定数量的随机键进行检查,并删除其中的过期键。

注意:并不是一次运行就检查所有的库,所有的键,而是随机检查一定数量的键。

定期删除函数的运行频率,在Redis2.6版本中,规定每秒运行10次,大概100ms运行一次。在Redis2.8版本后,可以通过修改配置文件redis.conf 的 hz 选项来调整这个次数。

  • 特点1:CPU性能占用设置有峰值,检测频度可自定义设置
  • 特点2:内存压力不是很大,长期占用内存的冷数据会被持续清理

五、三种删除方案对比

内存占用

CPU占用特征

定时删除

节约内存,无占用

不分时段占用CPU资源,频度高

时间换空间
惰性删除

内存占用严重

延时执行,CPU利用率高

空间换时间

定期删除

内存定期随机清理

每秒花费固定的CPU资源维护内存

随机抽查,重点抽查

六、逐出算法

Redis密钥驱逐策略概述(LRU、LFU等)
当Redis被用作缓存时,在添加新数据时,让它自动收回旧数据通常很方便。这种行为在开发人员社区中是众所周知的,因为它是流行的memcached系统的默认行为。
本页介绍了Redis maxmemory指令的更一般的主题,该指令用于将内存使用限制在固定数量。它还广泛涵盖了Redis使用的LRU驱逐算法,该算法实际上是精确LRU的近似值。

1、MaxMemory配置指令

maxmemory配置指令将Redis配置为对数据集使用指定数量的内存。您可以使用redis.conf文件设置配置指令,或者稍后在运行时使用CONFIG set命令设置配置指令。
例如,要配置100兆字节的内存限制,可以在redis.conf文件中使用以下指令:

maxmemory 100mb

将maxmemory设置为零将导致无内存限制。这是64位系统的默认行为,而32位系统使用3GB的隐式内存限制。
当达到指定的内存量时,驱逐策略的配置方式决定了默认行为。Redis可以为可能导致使用更多内存的命令返回错误,也可以在每次添加新数据时收回一些旧数据以返回到指定的限制。

2、驱逐政策

当达到最大内存限制时,Redis遵循的确切行为是使用maxmemory策略配置指令配置的。
以下策略可用:

  • noeviction:当达到内存限制时,不会保存新值。当数据库使用复制时,这适用于主数据库
  • allkeys-lru:保留最近使用的密钥;删除最近最少使用的(LRU)密钥
  • allkeys-lfu:保留常用密钥;删除最不常用的(LFU)密钥
  • volatilelru:删除最近最少使用的密钥,并将expire字段设置为true。
  • volatile lfu:删除过期字段设置为true的最不常用密钥。
  • allkeys random:随机删除密钥,为添加的新数据腾出空间。
  • volatile random:随机删除过期字段设置为true的密钥。
  • volatile ttl:删除过期字段设置为true和剩余最短生存时间(ttl)值的键。

到此这篇关于Redis 删除策略的三种实现的文章就介绍到这了,更多相关Redis 删除策略内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Redis中key过期策略的实现

    Redis中key过期策略的实现

    Key的过期机制是Redis保持高可用性的重要策略,过期策略分为惰性过期和定期过期,惰性过期在每次访问key时检查是否过期,定期过期则由serverCron方法定时清理过期key,本文就来详细的介绍一下,感兴趣的可以了解一下
    2024-09-09
  • Redis报错:无法连接Redis服务的解决方法

    Redis报错:无法连接Redis服务的解决方法

    在Linux系统上运行Redis服务时,有时会遇到“无法连接Redis服务”的报错,本文就详细的介绍一下解决方法,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • redis启动流程介绍

    redis启动流程介绍

    这篇文章主要介绍了redis启动流程介绍,本文更分5步,分别是准备运行环境、解析命令行参数、initServer()初始化服务、loadDataFromDisk()从rdb或aof文件加载数据、aeMain()开始事件循环,接收客户端请求,需要的朋友可以参考下
    2015-01-01
  • redis实现延迟任务的项目实践

    redis实现延迟任务的项目实践

    本文主要介绍了redis实现延迟任务的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • 深入解析RedisJSON之如何在Redis中直接处理JSON数据

    深入解析RedisJSON之如何在Redis中直接处理JSON数据

    JSON已经成为现代应用程序之间数据传输的通用格式,然而,传统的关系型数据库在处理JSON数据时可能会遇到性能瓶颈,本文将详细介绍RedisJSON的工作原理、关键操作、性能优势以及使用场景,感兴趣的朋友一起看看吧
    2024-05-05
  • 在不重启的情况下热更新Redis集群密码的流程步骤

    在不重启的情况下热更新Redis集群密码的流程步骤

    当我们需要在运行中的 Redis 集群中修改密码时,可以通过 Redis 的配置命令 CONFIG SET 实现即时修改,并使用 CONFIG REWRITE 将更改持久化到配置文件中,在本文中,我们将详细介绍如何安全地更新你的 Redis 集群密码,需要的朋友可以参考下
    2024-05-05
  • 详解redis中的锁以及使用场景

    详解redis中的锁以及使用场景

    这篇文章主要介绍了详解redis中的锁以及使用场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Redis持久化机制RDB的实现

    Redis持久化机制RDB的实现

    在Redis中,RDB是一种将内存中的数据保存到磁盘上的持久化机制,本文主要介绍了Redis持久化机制RDB的实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • Redis 整数集合的具体使用(intset)

    Redis 整数集合的具体使用(intset)

    对于集合,STL 的 set 相信大家都不陌生,本文主要介绍了整数集合,又称为 intset,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Redis数据库的应用场景介绍

    Redis数据库的应用场景介绍

    这篇文章主要介绍了Redis数据库的应用场景介绍,本文讲解了MySql+Memcached架构的问题、Redis常用数据类型、Redis数据类型应用和实现方式、Redis实际应用场景等内容,需要的朋友可以参考下
    2015-06-06

最新评论