当前位置: 首页 > news >正文

redis过期key的清理/删除策略

一,有三种不同的删除策略

  1. 立即清理。在设置键的过期时间时,创建一个回调事件,当过期时间达到时,由时间处理器自动执行键的删除操作。

  2. 惰性清理。键过期了就过期了,不管。当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key

  3. 定期清理。每隔一段时间,对expires字典进行检查,删除里面的过期键。

二,详细说明三种清理方式的优劣

  1. 立即清理
    立即删除能保证内存中数据的最大新鲜度,因为它保证过期键值会在过期后马上被删除,其所占用的内存也会随之释放。但是立即删除对cpu是最不友好的。
    因为删除操作会占用cpu的时间,如果刚好碰上了cpu很忙的时候,比如正在做交集或排序等计算的时候,就会给cpu造成额外的压力。

  2. 惰性删除
    惰性删除是指,某个键值过期后,此键值不会马上被删除,而是等到下次被使用的时候,才会被检查到过期,此时才能得到删除。
    所以惰性删除的缺点很明显:浪费内存。dict字典和expires字典都要保存这个键值的信息。

  3. 定时删除
    从上面分析来看,立即删除会短时间内占用大量cpu,惰性删除会在一段时间内浪费内存,所以定时删除是一个折中的办法。
    定时删除是:每隔一段时间执行一次删除操作,并通过限制删除操作执行的时长和频率,来减少删除操作对cpu的影响。
    另一方面定时删除也有效的减少了因惰性删除带来的内存浪费。

三,常用策略

目前redis使用的过期键值删除策略是:惰性删除加上定期删除,两者配合使用。
注意:
对于定期删除,在程序中有一个全局变量current_db来记录下一个将要遍历的库,假设有16个库,我们这一次定期删除遍历了10个,那此时的current_db就是11,下一次定期删除就从第11个库开始遍历,假设current_db等于15了,那么之后遍历就再从0号库开始(此时current_db==0

四,Redis内存淘汰机制

redis内存淘汰机制

  • noeviction:内存不足以写入新数据的时候会直接报错。
  • allKeys-lru:内存不足以写入新数据时候,移除最近最少使用的key。
  • allKeys-random: 内存不足以写入新数据时,随机移除key。
  • volatile-lru: 内存不足以写入新数据时,在设置了过期时间的key当中移除最近最少使用的key。
  • volatile-random: 内存不足以写入新数据时,在设置了过期时间的key中,随即移除key。
  • volatile-ttl: 内存不足以写入新数据时,在设置了过期时间的key当中移除最先过期的key。

上面六种你可以这么记:
不移除直接报错: noeviction
在所有key中移除: ①.allKeys-lru ②. allKeys-random
在设置了过期时间的key中移除: ①. volatile-lru ②. volatile-random ③.volatile-ttl
一般常用allKeys-lru

相关文章:

  • 解决服务器首次请求异常耗时问题
  • P2847 [USACO16DEC] Moocast G
  • 合肥鲸天科技的外卖会员卡系统有人做过吗?赚钱吗?
  • 人工智能和机器学习:探讨人工智能和机器学习的最新发展、应用、挑战和未来趋势
  • 企业四要素核验是什么?如何应用
  • 在 CentOS 中永久关闭防火墙的步骤
  • 代码库管理工具Git介绍
  • 【Unity】构建简单实用的年份选择器(简单原理示范)
  • spring-boot-starter-validation - 实际开发常见使用归纳
  • 探索 SPA 与 MPA:前端架构的选择与权衡
  • unity 场景烘焙中植物叶片(单面网络)出现的白面
  • 【kubernetes】关于k8s集群的资源发布方式(灰度/滚动发布)
  • 基于JavaWeb SSM bootStrap 校园二手市场管理系统的设计与实现
  • 博客系统前端页面
  • Kotlin Flow响应式编程,操作符函数进阶
  • Postman高频面试题及答案汇总(接口测试必备)
  • kaldi安装流程
  • 飞行机器人专栏(八)-- AGX Xavier 通信、控制及视觉应用开发
  • ZooKeeper设置ACL权限控制,删除权限
  • 前端面试题(JS部分)
  • 在博客园随笔中插入3D分子模型
  • 2009年数学二真题复盘
  • 零基础入门JavaWeb——Web基本概念
  • SpringBoot+Vue项目实现身体健康诊疗系统
  • cpu门禁电梯卡复制测试过程
  • DGL学习笔记——第一章 图
  • nginx配置https访问 生成ssl自签名证书,浏览器直接访问
  • Spring实战之容器、上下文、Bean的生命周期
  • 高级 Kubernetes 部署策略
  • RDD缓存机制及持久化技术
  • 50行Python代码实现自动下载小说,并打包exe直接
  • 第一个 GoWeb 程序,三款主流框架 Beego、Gin 和 Iris 快速入门