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

Redis 内存管理机制

Redis作为一个内存数据库,内存资源非常珍贵。因此,Redis引入了3种内存管理机制来释放不必要的内存,包括定期删除、惰性删除和内存淘汰机制。

定期删除

定期删除是Redis内存管理机制的一种,它用于删除过期的键值对。Redis每隔 100ms (可修改)时间就会随机选择一些键值对,将过期的键值对删除。而不是每次遍历所有的键值对,避免因为遍历所有的键值对并判断是否过期而消耗大量的性能。
定期删除可以通过设置过期时间(expire)来实现,但是存在一个问题:如果一个键值对很少被访问,即使它已经过期,也不会被删除,因为 Redis 每隔 100ms 使用随机算法选择一些键值对,并判断该键值对是否过期,而不会主动遍历所有键值对(也就是有可能很多次随机都没随机到某些过期的 key)。

惰性删除

Redis还实现了一种基于惰性删除的内存回收机制,也就是说,当一个键值对过期之后,并不会立即从内存中删除。相反,Redis会等到下次访问这个键值对时,才会将其删除。这种惰性删除机制可以保证内存的高效利用,将一些过期的但是又没有被 Redis 遍历到的数据删除,避免因过期键值对带来的空间浪费,提高Redis的性能和效率。

内存淘汰机制

虽然 Redis 的内存管理机制很高效,但是当内存不足时,Redis 必须采取一些措施来决定哪些键值对需要被删除。这时就需要使用内存淘汰机制。Redis 提供了8种内存淘汰策略:

1. 全局淘汰:

        1)allkeys-lru:淘汰范围是所有 keys,淘汰最久未使用的 key

        2)allkeys-lfu:淘汰范围是所有 keys,淘汰使用频次最少的

        3)allkeys-random:淘汰范围:所有 keys,随机淘汰 key

2. 淘汰 expire :

        1)volatile-lru:淘汰范围:所有设置了 expire 时间的 keys,淘汰最久未使用的 key

        2)volatile-lfu:淘汰范围:所有设置了 expire 时间的 keys,淘汰使用频次最少的 key

        3)volatile-random:淘汰范围:所有设置了 expire 时间的 keys,随机淘汰 key

        4)volatile-ttl:淘汰范围:所有设置了 expire 时间的 keys,淘汰 ttl 剩余时间最少的 key

3. 不淘汰:

        1)noeviction:不淘汰,意味着达到限制时,将无法存储

需要注意的是,Redis的内存淘汰机制仅在内存不足时才会启动,因此在使用 Redis 时,应该保证足够的内存资源,以避免不必要的内存回收和性能损失。

总而言之,以上三种内存管理机制都是Redis内部为了更好地管理内存而实现的。它们可以让Redis更高效地利用内存,减少空间浪费,并提高性能。

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

相关文章:

  • Apache Zeppelin系列教程第九篇——Zeppelin NoteBook数据缓存
  • 用代码实现一个简单计算器
  • 运维圣经:挖矿木马应急响应指南
  • 【Flutter】Flutter 如何获取安装来源信息
  • Stimulsoft Reports用户手册:Report Designer介绍
  • 跨模态检索论文阅读:Dissecting Deep Metric Learning Losses for Image-Text Retrieval(GOAL)
  • 贪心算法part5 | ● 435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间
  • IMX6ULL裸机篇之SPI实验-ICM20608代码实现
  • 51单片机读取DS18B20温度传感器
  • set/map学习
  • JavaScript Web APIs学习总结
  • 萤石摄像头RTSP流获取(黑屏解决)
  • ThreadLocal引发的内存泄漏分析
  • 银行数据治理:数据质量管理实践
  • 2.7V至25V宽输入电压15A 峰值电流
  • Vue 父子组件应用指南:从基础到实战
  • todotodo
  • 创建autotool项目
  • 计算机概念
  • 【数学建模系列】TOPSIS法的算法步骤及实战应用——MATLAB实现
  • 网络安全(黑客)工具
  • 探究前后端数据交互方式
  • Yolov5轻量化:CVPR2023|RIFormer:无需TokenMixer也能达成SOTA性能的极简ViT架构
  • Spring-Retry实现及原理
  • Java中的锁
  • 学习系列:5种常见的单例模式变体及其实现方式
  • 三菱FX5U系列PLC之间进行简易PLC间链接功能的具体方法
  • 基于DBACAN的道路轨迹点聚类
  • 【项目】接入飞书平台
  • c++11 标准模板(STL)(std::ios_base)(三)