redis学习笔记-策略LRU和LFU策略思想(之后会书写代码)

本文介绍了Redis中的LRU和LFU淘汰策略。LRU基于最近最少使用原则,利用24位时钟淘汰最久未使用的键;LFU则通过计数器记录访问频率,采用对数计数器防止计数溢出。Redis配置参数如`maxmemory`、`maxmemory_policy`和`maxmemory_samples`影响淘汰行为。LFU策略的计数器根据`lfu-log-factor`和`lfu-decay-time`调整增长和减少速度。
摘要由CSDN通过智能技术生成

最近在看<<redis实现与分析>>这本书,在学习redis之前,学长就建议我可以学习一下redis的淘汰策略 LRU 和 LFU 策略

LRU策略:使用和操作系统中的LRU近似的一种说法,在所有的key中找到一部分,找出其中距离现在访问最迟的key,并且淘汰

LRU行为配置参数:
maxmemory , 缓存数据占用的内存限制,如果缓存的数据消耗的内存超过这个数值的限制的话,会触发数据淘汰
maxmemory_policy 淘汰策略,定义参与淘汰的数据的类型和属性
maxmemory_samples 随机采样的精度,配置越大,越接近LRU

Redis维护了24位时钟,每隔一段时间会更新这个时钟,每个key对象内部维护了一个24位的时钟,新增的话会把系统的时钟赋值给这个内部对象时钟.我现在进行LRU,首先拿到当前的全局时钟,之后找出距离全局时钟距离时间最久的进行淘汰,全局时钟只有24位,key可能会超过24位,这个时候就把系统时钟和内部对象时钟相加,值最大的被淘汰

struct redisServer
{
....
unsigned lruclock:LRU_BITS;
...
};
typedef  struct object
{
...
lru:LRU_BITS;
....
};

该计数器调用getLRUClock获取当前系统的毫秒数,作为LRU时间数,该计数器占用了24位,但是在这里如果超出24位就是超出194天之后,会重新赋值,
Redis 中还有一个缓冲池的概念,当每一轮移除Key的idle time , 如果它的idle time 比pool 里面idle time 最大的,并且 : pool 里面的key

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值