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

Redis 内存回收策略小结

Redis 内存回收策略

及时回收内存中不需要的数据,能有效地保持性能和防止内存溢出。Redis内存回收主要有两种场景

  • 删除过期的键值对
  • 内存使用达到maxmemory时触发回收策略

删除过期的键值对

  • 惰性删除: 在查询时如果发现 该键值对已经过期则执行删除操作并返回为空。

    • 优势

      这种策略对CPU友好,它不需要单独维护ttl链表处理过期key。但可能存在内存泄露问题,如果一个键值对过期了,一直不查询它,内存就一直不会释放。

  • 定期任务删除
    Redis 启动了一个周期性的任务,用来主动地查找并删除数据库中的过期键。

    这个过程不是逐个检查每个键,而是从设置的过期键集合中随机选取一部分样本,并删除其中已过期的键。

相关配置

配置参数 hz 即 Redis 每秒检查过期键的次数,默认10

定时任务每次随机检查一定数量键ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP 定义,默认值通常是 20

内存溢出控制策略

当内存达到配置的maxmemory时触发回收策略。Redis 提供了多种淘汰策略,从淘汰键值对范围上分有

  • 从所有key 进行筛选清除
  • 从设置了过期时间的键值对中筛选清除

从筛选算法上分有lru ,random,ttl (最短剩余生存时间优先)
以下是具体淘汰策略。

  • noeviction:
    这是最保守的策略,所有的写操作都将因内存不足返回错误,并不会移除任何键。

    适用于那些绝对不能丢失数据的应用场景。

  • allkeys-lru:
    从所有键中选择最近最少使用的键进行删除。

    一般的缓存使用场景可以选择该策略,该策略相对比较"公平"

  • volatile-lru:
    只考虑设置了过期时间的键,从中选择最近最少使用的键进行删除。

    保证永不过期的重要的数据不被自动清除,或者永不过期的数据非常重要时该策略是个选择。

  • allkeys-random:
    从所有键中随机选择键进行删除。

这种策略不考虑键的使用频率等因素。实现简单,对 CPU 的消耗相对较小,不如 LRU 算法那样"公平"

  • volatile-random:
    只考虑设置了过期时间的键,从中随机选择键进行删除。
    与volatile-lru类似,但采用的是随机选择。

  • volatile-ttl:
    从设置了过期时间的键中选择剩余生存时间最短的键进行删除。

当需要优先淘汰那些即将过期的数据时,可以使用此策略。

总结

Redis中尽量存放一些热点数据,切勿所有数据放入Redis中,Redis虽然可以持久化数据,但Redis操作主要在内存中操作,数据会加载到内存,切勿把Redis当成Mysql之类,所有数据都放到Redis。


http://www.kler.cn/a/375592.html

相关文章:

  • 网络编程-UDP套接字
  • 【2024年华为OD机试】 (B卷,100分)- 路灯照明问题(Java JS PythonC/C++)
  • 2025年1月17日(点亮三色LED)
  • SpringBoot实现定时任务,使用自带的定时任务以及调度框架quartz的配置使用
  • 寒假1.18
  • FastADMIN实现网站启动时执行程序的方法
  • Spark中的常见算子
  • ubuntu22-安装vscode-配置shell命令环境-mac安装
  • Serverless + AI 让应用开发更简单
  • 报错:npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。
  • vue3-element-admin 去掉登录
  • Docker Compose入门学习——下载、授权、创建文件、定义服务
  • 创建一个基于SSM(Spring, Spring MVC, MyBatis)的教学视频点播系统
  • Sigrity Power SI Multiple Structure Simulation模式如何进行跨板级联仿真操作指导(一)
  • npm install -g @vue/cil 非常卡慢
  • linux alsa-lib snd_pcm_open函数源码分析(一)
  • 腾讯云数据库TDSQL:数据库界的“高架桥”
  • 【论文阅读】Associative Alignment for Few-shot Image Classification
  • ESP-IDF HTTP POST请求发送音频-启明云端乐鑫代理商
  • 【机器学习】21. Transformer: 最通俗易懂讲解
  • 优化低代码开发平台用户体验:功能树导航设计探讨
  • 穷举vs暴搜vs深搜vs回溯vs剪枝 算法专题
  • #渗透测试#SRC漏洞挖掘# 操作系统-windows系统
  • C++设计模式结构型模式———桥接模式
  • watch 和 computed 的区别 - 2024最新版前端秋招面试短期突击面试题【100道】
  • MySQL锁——针对实习面试