Redis内存策略

说明:这八种算法是基于redis5.0版之后的,他新增了allkeys-lfu,volatile-lfu这两种算法,也就是多了LFU算法,而LFU与LRU算法不同在于:LRU是淘汰最近最少使用的页面进行淘汰,而LFU是要求在页面置换时置换引用计数最小的页,因为经常使用的页应该有一个较大的引用次数。但是有些页在开始时使用次数很多,但是以后就不再使用,这类页将会长时间留在内存中,因此可以将引用计数寄存器定时右移一位,形成指数衰减的平均使用次数。

1.Redis内存策略

1.1.内存使用情况说明

Redis将数据都保存到内存中,如果一直往内存中存储数据,而不维护,将来可能导致内存数据存不下,内存溢出。

  • 主动淘汰
    在redis赋值操作执行时,可以添加超时时间,当时间一到则数据自动删除

  • 采用算法进行淘汰

1.2.Redis中内存优化算法

1.2.1.LRU算法

LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最少未使用的页予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t,当须淘汰一个页面时,选择现有页面中其t值最大的,即最近最少使用的页面予以淘汰。

以时间T为维度,删除不使用的数据,实现内存的清空。

1.2.2.LFU算法

LFU(least frequently used(LFU) page-replacement algorithm)。即最不经常使用页置换算法,要求在页置换时置换引用计数最小的页,因为经常使用的页应该有一个较大的引用次数。但是有些在开始时使用次数很多,但是以后就不能使用,这类页将会长时间留在内存中,因此可以将引用计数寄存器定时右移一位,形成指数衰减的平均使用次数。

1.2.3.具体八种算法

  • 1.volatile-lru 设定了超时时间数据,之后采用LRU算法进行删除
  • 2.allkeys-lru 全部数据,采用LRU算法进行内存数据的优化
  • 3.volatile-lfu 设定了超时时间的数据,采用LFU算法进行删除
  • 4.allkeys-lfu 所有的数据采用LFU算法实现数据删除
  • 5.volatile-random 为设定超时时间的数据采用随机算法
  • 6.allkeys-random 所有数据采用随机算法实现删除
  • 7.volatile-ttl 将所有设定了超时时间的数据,利用ttl方式进行排序,将还没超时的数据提前删除
  • 8.noeviction(默认策略)不采用任何的算法删除数据,如果将来内存溢出则报错返回

1.2.4.修改redis内存策略

设定redis中的内存优化策略

问题:如果redis中有100万的数据,都要采用LRU算法进行优化,则计算100万数据的事件性能太低了。

优化:随机筛选5个数据,在5个数据中执行lru算法,优化1个数据

一般默认值为5,表示性能最优,筛选的个数可以调整,最大不要超过10

据官方的统计,如果筛选的个数为10,则接近真实的LRU算法,但是会增加内存的开销。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值