Redis近似LRU算法优化

本文深入探讨Redis 3.0中LRU算法的优化,包括时钟粒度提升至毫秒级、采样样本优化、eviction pool的引入,以及这些改变如何提升性能和更接近严格LRU算法。
摘要由CSDN通过智能技术生成

本文和大家分享的主要是redis中,从算法性能及模拟效果提升出发优化近似LRU算法的相关操作,希望通过本文的分享,对大家学习redis 有所帮助。

Redis 3.0 LRU算法优化实现

Redis 3.0中主要做了如下优化:

· LRU 时钟的粒度从秒级提升为毫秒级

· 使用新的 API 来获取LRU替换时的采样样本

· 默认的LRU采样样本数从3提升为5

· 使用 eviction pool 来选取需要淘汰的key

  提升 LRU时钟 的粒度,主要是为了在测试LRU算法性能时,能够在更短的时间内获取结果,更新LRU时钟的方法也有所变化,如果LRU时钟的时间粒度高于 serverCron刷新的时间粒度,那么就主动获取最新的时间,否则使用server缓存的时间,

/* Macro used to obtain the current LRU clock.

* If the current resolution is lower than the frequency we refresh the

* LRU clock (as it should be in production servers) we return the

* precomputed value, otherwise we need to resort to a system call. */#define LRU_CLOCK() ((1000/server.hz <= LRU_CLOCK_RESOLUTION) ? server.lruclock : getLRUClock())

unsigned int getLRUClock(void) {

return (mstime()/LRU_CLOCK_RESOLUTION) & LRU_CLOCK_MAX;

}

  在源码的 utils/lru 目录下有测试脚本,测试前需要把 src/redis.h 中的 REDIS_LRU_CLOCK_RESOLUTION 宏设置为1,即LRU时钟的分辨率为 1ms ,然后重新编译源码,执行方式如下,

ruby test-lru.rb > /tmp/lru.html

  测试完成后会生成一个 html 页面,包含测试结果,以及一个图形化的插入淘汰流程


Redis 2.8 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值