Redis5.0以后的内存策略--最新八种算法

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


1. Redis内存策略

1.1 内存使用状况说明

Redis将数据都保存到内存中,若是一直往内存中存储数据,而不维护.未来可能致使内存数据存不下.内存溢出.redis

  • 1.主动淘汰
            在redis赋值操做执行时,能够添加超时时间.当时间一到则数据自动删除.算法

  • 2.采用算法进行淘汰dom

1.2 Redis中内存优化算法

1.2.1LRU算法

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

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

1.2.2LFU算法

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

1.2.3具体八种算法

  • 1.volatile-lru 设定了超时时间数据,以后采用LRU算法进行删除.blog

  • 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中的内存优化策略.

597 maxmemory-policy volatile-lru

608 maxmemory-samples 5         lru算法取值个数

问题:若是redis中有100万的数据,都要采用LRU算法进行优化,则计算100万数据的时间性能过低了.

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

通常默认值为5,表示性能最优.筛选的个数能够调整 最大不要超过10.

据官方的统计,若是筛选的个数为10 ,则接近真实的LRU算法.可是会增长内存的开销.

相关文章
相关标签/搜索