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算法.但是会增加内存的开销.
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Gitee 代码搜索上线了,居然还可以搜索这些东西
截止今天,Gitee 上已经有了超过 600 万个代码仓库,其中包含了大量开源的,可以被开发者们复用的代码资源。当开发者们在编程过程中遇到不熟悉的特定库、不知道该调用哪些函数,或者准备实现一段简单的代码时,往往会去搜索期望的代码片段, 并进行不同方式的复用。 Gitee 的代码搜索服务 Gitee Search 便是针对这个需求推出的。 目前 Gitee Search 已支持通过 PC和手机网页版对全站公开非 Fork 仓库默认分支进行代码行搜索,同时也支持指定代码仓库的搜索。 如果想了解某个 API 其他人如何使用,可以通过代码搜索去查找指定关键字的内容。 除此之外,Gitee Search 还支持开源仓库、Issue 和相关博客的搜索。 偷偷告诉你个秘笈:可以检查公司内部的代码有没有被泄露哦~ 前往 https://search.gitee.com/ 体验。
- 下一篇
源码分析Dubbo网络通信篇NettyServer、HeaderExchangeServer
本文主要分析一下NettyServer,HeaderExchangeServer实现细节。 1、NettyServer NettyServer整个类图如下: 首先从全貌上大概看一下NettyServer对象所持有的属性: AbstractPeer private final ChannelHandler handler 事件处理Handler。 private volatile URL url 该协议的第一个服务提供者的URL, Server只需要用到 URL中的参数,与具体某一个服务没什么关系。 AbstractEndpoint private Codec2 codec 编码解码器。 private int timeout 超时时间 private int connectTimeout 连接超时时间 AbstractServer private InetSocketAddress localAddress :url host:port地址。 private InetSocketAddress bindAddress:如果是多网卡,并且指定了 bind.ip、bind.port,如果为...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7安装Docker,走上虚拟化容器引擎之路