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

Redis内存回收

Redis 内存回收

Redis之所以性能很强,最主要的原因是基于内存存储,然而单节点的Redis其内存大小不宜过大,会影响持久化或主从同步性能

可以通过修改配置文件来设置Redis的最大内存

maxmemory <bytes>

当内存达到上限时,就无法存储更多的数据

内存过期策略

Redis的TTL记录方式

  • RedisDB种通过一个Dict记录每一个key的TTL时间

过期key的删除策略:

  • 惰性清理:每次查找key是判断是否过期,如果过期则删除
  • 定期清理:定期抽样部分key,判断是否过期,如果过期则删除

定期清理的两种方式

  • SLOW模式执行频率默认为10,每次不超过25ms
  • FAST模式执行频率不固定,单两次间隔不低于2ms,每次耗时不超过1ms

内存淘汰策略:

内存淘汰机制:就是当Redis内存达到设定的阈值时,Redis主动挑选部分key删除已释放更多内存的流程

8个策略:

  • noeviction:不淘汰任何内存,但是内存满的时候不允许写入新的数据。【默认选项】
  • volatile-ttl:对设置TTL的key,比较剩余的TTL,剩余的TTL越小越先被淘汰
  • allkeys-random:对全体key,随即进行淘汰。也就是直接从db->dict种随机挑选
  • volatile-random:对设置了TTL的key,随机进行淘汰,也就是db->dict种随机挑选
  • allkeys-lru:对全体key,基于LRU算法进行淘汰
  • volatile-lru:对设置过期时间的key,基于LRU算法进行淘汰
  • allkeys-lfu:对全体key,基于LFU算法进行淘汰
  • volatile-lfu:对设置TTL的key,基于LFU算法进行淘汰

设置方法:

maxmemory-policy noeviction

默认为noeviction

image-20230219082221510

LRU(Least Recently Used),最少最近使用的,用当前时间减去最后一次访问时间,这个值越大淘汰的优先级就越高

LFU(Least Frequently Used),最少频率使用的。会统计每个key的访问效率,值越小淘汰优先级越高

image-20230219083617390

LFU的访问次数之所以叫做逻辑访问此时,是因为并不是每次key被访问都可以技术,而是通过运算:

  1. 生成0~1之间的随机数R
  2. 计算1/(旧次数* lfu_factor +1) ,记作P,lfu_log_factor默认为10;
  3. 如果R<P,则计时器+1,最大不超过255
  4. 访问次数都会随着时间衰减,距离上一次访问时间每隔lfu_decay_time(默认为1),计数器-1

image-20230219084133828

http://www.lryc.cn/news/12212.html

相关文章:

  • ROS2 入门应用 引用自定义消息(C++)
  • Spring中的数据校验
  • python批量翻译excel表格中的英文
  • 基于SSM框架的RBAC权限系统设计与 实现
  • 目标检测各常见评价指标详解
  • 深入讲解Kubernetes架构-控制器
  • Urho3D本地化 国际化
  • 千锋教育嵌入式物联网教程之系统编程篇学习-04
  • 【运维】什么是 DevOps?
  • 【C++入门】引用、内联函数、auto关键字、基于范围的for循环(C++11)、指针空值nullptr(C++11)
  • 《FPGA学习》->多个按键控制LED灯
  • vb.net计算之.net core基础(4)-项目与程序结构(2)
  • 基于RK3588的嵌入式linux系统开发(五)——uboot优化修改(按任意按键停止autoboot)
  • Lumerical---在FDTD和MODE工程中的PML边界条件
  • 论文投稿指南——中文核心期刊推荐(社会学)
  • KVM-4、KVM 高级功能详解
  • 【Linux】进程状态
  • 2023河南省第二届职业技能大赛郑州市选拔赛“网络安全”项目比赛样题任务书
  • pygame8 扫雷游戏
  • c/c++开发,无可避免的模板编程实践(篇四)
  • c++11 标准模板(STL)(std::unordered_set)(二)
  • GEE学习笔记 七十二:【GEE之Python版教程六】命令行简介
  • DDD单根 聚合根 实体 值对象
  • SpringMvc介绍。
  • 华为OD机试 - 最小传递延迟(JS)
  • 学生信息管理系统(通讯录)----------通俗易懂、附源码、C语言实现
  • Python抽奖系统
  • 真实景观渲染技巧【Three.js】
  • MySQL知识汇总:MySQL函数CASE WHEN用法详解
  • Python学习-----模块1.0(模块的简介、定义与使用)