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

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.lryc.cn/news/470384.html

相关文章:

  • React常用前端框架合集
  • python对文件的读写操作
  • Redis工具类(解决缓存穿透、缓存击穿)
  • Air780E量产binpkg文件的获取方法
  • C++STL之stack
  • git的学习之远程进行操作
  • 蓝桥杯普及题
  • Spreadsheet导出excel
  • Leetcode|454.四数相加II ● 383. 赎金信 ● 15. 三数之和 ● 18. 四数之和
  • 使用ceph-csi把ceph-fs做为k8s的storageclass使用
  • 太速科技-212-RCP-601 CPCI刀片计算机
  • 【解决 Windows 下 SSH “Bad owner or permissions“ 错误及端口转发问题详解】
  • 使用预训练的BERT进行金融领域问答
  • ReactOS系统中MM_REGION结构体的声明
  • web相关知识学习笔记
  • App测试环境部署
  • 【论文阅读】Tabbed Out: Subverting the Android Custom Tab Security Model
  • 2025 - AI人工智能药物设计 - 中药网络药理学和毒理学的研究
  • iwebsec靶场 XSS漏洞通关笔记
  • 设计模式-单例模型(单件模式、Singleton)
  • 笔记本双系统win10+Ubuntu 20.04 无法调节亮度亲测解决
  • 零基础Java第十一期:类和对象(二)
  • NumPy包(下) python笔记扩展
  • 极狐GitLab 17.5 发布 20+ 与 DevSecOps 相关的功能【一】
  • Oracle 第1章:Oracle数据库概述
  • 7、Nodes.js包管理工具
  • 网络地址转换——NAT技术详解
  • 问:数据库存储过程优化实践~
  • C++ vector的使用(一)
  • 深入浅出:ProcessPoolExecutor 处理异步生成器函数