Redis 内存淘汰策略,从根儿上理解

本文深入探讨了Redis的内存淘汰机制,包括全局淘汰策略、基于expire的淘汰、不淘汰策略,以及LRU和LFU算法的工作原理。文章指出,Redis通过设定maxmemory阈值触发淘汰,并介绍了淘汰过程中何时清理、清理哪些、清理多少以及如何清理的决策过程。
摘要由CSDN通过智能技术生成

前言

本文参考源码版本 redis6.2

Redis 基于内存设计,所有数据存放在内存,随着时间推移,内存占用也越来也高 ...

由于内存容量这个物理限制,我们需要在内存使用量达到一定比例后,做一些内存清理工作,以保证有足够的空间来完成正常的处理。

在 Redis 中,完成这个工作的就是本文的主角 ------- Redis 内存淘汰机制。

  • 一定比例:在 redis 中就是 maxmemory 阈值
  • 淘汰策略:在 redis 中目前有两种流行的算法:LRU 与 LFU 算法

如果让你来设计一款内存淘汰策略,你会考虑哪些方面?

1)首先,从用户体验上看:

  • 不要影响服务正常使用,实现平滑淘汰
  • 用户透明,用户不需要做任何额外操作

2)其次,从系统层面来看:

  • 何时清理?

  • 清理哪些?

  • 清理多少?

  • 怎样清理?

  • 清理频次?

带着这些问题,我们一起来探索下,Redis 是如何考虑并实现的。

一、淘汰策略

淘汰策略也是可以在 redis.config 中指定:

maxmemory-policy ...
复制代码

截止目前,共有 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:不淘汰,意味着达到限制时,将无法存储

二、淘汰算法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值