Redis5.0之后的内存策略--最新八种算法
前言:这八种算法是基于redis5.0版之后的,他新增了新增allkeys-lfu,volatile-lfu这两种算法,也就是多了LFU算法,而LFU与LRU算法不同在于;LRU是淘汰最近最长时间未使用的页面进行淘汰,而LFU是要求在页置换时置换引用计数最小的页,因为经常使用的页应该有一个较大的引用次数。但是有些页在开始时使用次数很多,但以后就不再使用,这类页将会长时间留在内存中,因此可以将引用计数寄存器定时右移一位,形成指数衰减的平均使用次数。
1. Redis内存策略
1.1 内存使用情况说明
Redis将数据都保存到内存中,如果一直往内存中存储数据,而不维护.将来可能导致内存数据存不下.内存溢出.
-
1.主动淘汰
在redis赋值操作执行时,可以添加超时时间.当时间一到则数据自动删除. -
2.采用算法进行淘汰
1.2 Redis中内存优化算法
1.2.1LRU算法
LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。
以时间T为维度,删除不使用的数据,实现内存的清空。
1.2.2LFU算法
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中的内存优化策略.
597 maxmemory-policy volatile-lru 608 maxmemory-samples 5 lru算法取值个数
问题:如果redis中有100万的数据,都要采用LRU算法进行优化,则计算100万数据的时间性能太低了.
优化:随机筛选5个数据. 在5个数据中执行lru算法.优化1个数据.
一般默认值为5,表示性能最优.筛选的个数可以调整 最大不要超过10.
据官方的统计,如果筛选的个数为10 ,则接近真实的LRU算法.但是会增加内存的开销.
- 1-3 (JVM)垃圾回收---内存分配策略、垃圾收集器(G1)、GC算法、GC参数、对象存活的判定
- Redis之最大内存置换策略
- Redis的过期策略和内存淘汰策略
- redis数据过期策略以及内存淘汰机制
- Redis内存回收:LRU算法
- 垃圾收集器与内存分配策略——对象的生命、垃圾收集算法
- Redis(六)--- Redis过期策略、内存淘汰机制、消息及事物
- Redis的内存淘汰机制、过期策略
- 垃圾收集算法与内存分配策略--《深入理解Java虚拟机》学习笔记
- 垃圾收集器与内存分配策略-HotSpot算法实现
- CentOS的Redis内存分配策略配置
- Java虚拟机(二)垃圾收集算法与内存分配策略
- 对象引用算法、垃圾收集算法、内存分配策略
- Java的垃圾收集算法、垃圾收集器以及内存分配与回收策略
- redis的过期策略都有哪些?内存淘汰机制都有哪些?手写一下LRU代码实现?
- 垃圾收集算法与内存分配策略(笔记)
- Redis的内存淘汰策略
- Java架构-Redis的内存回收策略和Key过期策略,看这篇就够了
- 内存分配策略和分配算法
- Redis-17Redis内存回收策略