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分布式限流组件设计与使用实例

    Redis分布式限流组件设计与使用实例

    本文主要讲解基于 自定义注解+Aop+反射+Redis+Lua表达式 实现的限流设计方案。实现的限流设计与实际使用。具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • 关于redis状态监控和性能调优详解

    关于redis状态监控和性能调优详解

    Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。有字符串,链表、哈希、集合和有序集合5种。下面这篇文章主要给大家介绍了关于redis状态监控和性能调优的相关资料,需要的朋友可以参考下。
    2017-09-09
  • 从一个小需求感受Redis的独特魅力(需求设计)

    从一个小需求感受Redis的独特魅力(需求设计)

    Redis在实际应用中使用的非常广泛,本篇文章就从一个简单的需求说起,为你讲述一个需求是如何从头到尾开始做的,又是如何一步步完善的
    2019-12-12
  • Redis自动化安装及集群实现搭建过程

    Redis自动化安装及集群实现搭建过程

    这篇文章主要介绍了Redis自动化安装以及集群实现搭建过程,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • Redis基本数据类型Set常用操作命令

    Redis基本数据类型Set常用操作命令

    这篇文章主要为大家介绍了Redis基本数据类型Set常用操作命令,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Redis的Expire与Setex区别说明

    Redis的Expire与Setex区别说明

    这篇文章主要介绍了Redis的Expire与Setex区别说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • 基于redis实现分布式锁的原理与方法

    基于redis实现分布式锁的原理与方法

    这篇文章主要给大家介绍了基于redis实现分布式锁的原理与方法,文中通过示例代码介绍的非常详细,对大家学习或者使用redis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-06-06
  • Redis安装与使用方法小结

    Redis安装与使用方法小结

    这篇文章主要介绍了Redis安装与使用方法,结合实例形式分析了Redis数据库的下载、安装、启动、设置及相关使用操作注意事项,需要的朋友可以参考下
    2018-04-04
  • redis的hash类型操作方法

    redis的hash类型操作方法

    Hash 是一个 String 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象,这篇文章主要介绍了redis的hash类型的详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • Redis BloomFilter实例讲解

    Redis BloomFilter实例讲解

    这篇文章主要介绍了Redis BloomFilter实例。BloomFilter不需要存储key,节省空间,在某些对保密要求非常严格的场合有优势。想要进一步了解BloomFilter运用实例的小伙伴可以了解一下这篇文章
    2021-09-09

最新评论