Redis达到最大占用内存后的淘汰策略
1. 查询Redis最大占用内存
# 查询最大占用内存
config get maxmemory
# 为0时在64操作系统中不限制内存,在32位操作系统中最大为3GB
2. Redis设置最大占用内存
- 通过配置文件设置
# 设置最大占用内存大小为100MB
maxmemory 100MB
- 通过命令设置
# 设置最大占用内存大小为100MB
config set maxmemory 100MB
3. Redis内存淘汰策略
- noeviction(默认策略)
对于写请求不再提供服务,直接返回错误(DEL或部分特殊请求除外)。 - allkeys-lru
从所有key中使用LRU算法进行淘汰。 - volatile-lru
从设置了过期时间的key中使用LRU算法进行淘汰。 - allkeys-random
从所有key中随机淘汰数据。 - volatile-random
从设置了过期时间的key中随机淘汰。 - volatile-ttl
在设置了过期时间的key中,根据key的过期时间进行淘汰,越早过期越优先淘汰。
注意:当使用volatile-lru、volatile-random、volatile-ttl这三种策略时,如果没有key可以被淘汰,则和默认策略一样返回错误。
4. 查询Redis内存淘汰策略
# 查询内存淘汰策略
config get maxmemory-policy
5. Redis设置内存淘汰策略
- 通过配置文件设置
# 设置内存淘汰策略为:allkeys-lru
maxmemory-policy allkeys-lru
- 通过命令设置
# 设置内存淘汰策略为:allkeys-lru
config set maxmemory-policy allkeys-lru
6. LRU算法
LRU(Least Recently Used),即最近最少使用,是一种缓存置换算法。
在使用内存作为缓存的时候,缓存的大小一般是固定的。当缓存被占满,这个时候继续添加数据,就需要淘汰一部分数据,释放内存空间存储新的数据。此时就可以使用LRU算法了,其核心思想是:如果一个数据在最近一段时间没有被用到,那么将来被使用到的可能性也很小,所以就可以被淘汰。
7. LRU算法在Redis中的实现
Redis使用的是近似LRU算法。近似LRU算法通过随机采样法淘汰数据,每次随机出5(默认)个key,从里面淘汰掉最近最少使用的key。
可以通过maxmemory-samples参数修改采样数量:修改配置文件中maxmemory-samples 10或通过命令config set maxmemory-samples 10。maxmenory-samples配置的数值越大,淘汰的结果越接近于严格的LRU算法。
Redis为了实现近似LRU算法,给每个key额外增加了24字节,用来存储该key最后一次被访问的时间。
8. Redis3.0对近似LRU的优化
Redis3.0对近似LRU算法进行了一些优化。新算法会维护一个候选池(大小为16),池中的数据根据访问时间进行排序,第一次随机选取的key都会放入池中,随后每次随机选取的key只有在访问时间小于池中最小的时间才会放入池中,直到候选池被放满。当放满后,如果有新的key需要放入,则将池中最后访问时间最大(最近被访问)的移除。
当需要淘汰的时候,则直接从池中选取最近访问时间最小(最久未被访问)的key淘汰。
9. Redis4.0新增LFU算法
LFU(Least Frequently Used),它的核心思想是:根据key的最近访问频率进行淘汰,很少被访问的优先被淘汰,访问多的则被留下来。
LFU算法能更好的表示一个key被访问的热度。假如使用的是LRU算法,一个key很久没有被访问,但是刚刚偶尔被访问了一次,那么它就被认为是热点数据,不会被淘汰,而有些key将来很有可能被访问到但被淘汰了。如果使用LFU算法则不会出现这种情况,因为使用一次并不会使一个key成为热点数据。
10. LFU算法策略
- volatile-lfu
在设置了过期时间的key中使用LFU算法淘汰。 - allkeys-lfu
在所有的key中使用LFU算法淘汰数据。
注意:LFU策略只能在Redis4.0及以上版本使用,版过低会报错。
Redis达到最大占用内存后的淘汰策略的更多相关文章
- Redis++:Redis 内存爆满 之 淘汰策略
前言: 我们的redis使用的是内存空间来存储数据的,但是内存空间毕竟有限,随着我们存储数据的不断增长,当超过了我们的内存大小时,即在redis中设置的缓存大小(maxmeory 4GB),redis ...
- httpd2.4.6三种工作模式(如何配置),防止占用内存暴增的策略
之前偷懒默认用yum安装了httpd.后来发现服务器内存暴增,一度达到75% 打开一看,好嘛后台休眠进程全是httpd. 重启之后再度访问发现内存还是稳步增长. [root@iz2ze3ayxs2yp ...
- 设置Redis最大占用内存
https://blog.csdn.net/happyrabbit456/article/details/54945667 Redis需要设置最大占用内存吗?如果Redis内存使用超出了设置的最大值会 ...
- redis六种内存淘汰策略学习
当客户端会发起需要更多内存的申请,Redis检查内存使用情况,如果实际使用内存已经超出maxmemory,Redis就会根据用户配置的淘汰策略选出无用的key; 当前Redis3.0版本支持的淘汰策略 ...
- Redis中的LRU淘汰策略分析
Redis作为缓存使用时,一些场景下要考虑内存的空间消耗问题.Redis会删除过期键以释放空间,过期键的删除策略有两种: 惰性删除:每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除 ...
- Redis的内存淘汰策略
Redis占用内存大小 我们知道Redis是基于内存的key-value数据库,因为系统的内存大小有限,所以我们在使用Redis的时候可以配置Redis能使用的最大的内存大小. 1.通过配置文件配置 ...
- Redis 内存满了怎么办? Redis的内存淘汰策略
https://juejin.im/post/5d674ac2e51d4557ca7fdd70 Redis占用内存大小 我们知道Redis是基于内存的key-value数据库,因为系统的内存大小有限, ...
- Redis详解(十一)------ 过期删除策略和内存淘汰策略
在介绍这篇文章之前,我们先来看如下几个问题: ①.如何设置Redis键的过期时间? ②.设置完一个键的过期时间后,到了这个时间,这个键还能获取到么?假如获取不到那这个键还占据着内存吗? ③.如何设置R ...
- Redis的内存回收原理,及内存过期淘汰策略详解
Redis 内存回收机制Redis 的内存回收主要围绕以下两个方面: 1.Redis 过期策略:删除过期时间的 key 值 2.Redis 淘汰策略:内存使用到达 maxmemory 上限时触发内存淘 ...
随机推荐
- DockerInstall
1.安装Tomcat 2.安装mysql [1].pull [root@pluto tomcat7logs]# docker pull mysql:5.6 [root@pluto tomcat7log ...
- deepin V20 简易入门指南
deepin V20 入坑指南 系统安装 入坑第一步自然是先安装系统了,deepin的安装方式很简单只需要一个U盘即可,在官网下载好安装镜像文件,使用官方的启动盘制作工具,开机时选择从U盘启动即可,安 ...
- 使用XSL解析XML输出HTML(XSL学习笔记一)
最近项目用到 XSL + XML,XML大家应该很熟悉,XSL暂且不解释,先看效果,如果想学习XSL的内容,可以先访问: https://www.w3school.com.cn/xsl/xsl_lan ...
- java 连接sqlserver
db.properties 文件 driver=com.microsoft.sqlserver.jdbc.SQLServerDriver url=jdbc:sqlserver://10.1.1.19: ...
- (i春秋 Misc)ReCreators - CryMisc
[i春秋 Misc] [题目链接] i春秋 Misc ReCreators CryMisc ReCreators 下载得到一个文件.老规矩,放入010文本编辑器中查看: 文件头是: KDMV 不清楚. ...
- 中级实训Android学习记录——Toast、AlertDialog、ProgressBar
学习记录 2020/11/22 Toast Toast Toast是一个消息提示组件 我们可以设置其显示的位置 自定义其显示的内容 对Toast的简单封装可以达到不同的目的 Toast的默认用法 To ...
- (在模仿中精进数据可视化05)疫情期间市值增长top25公司
本文完整代码及数据已上传至我的Github仓库https://github.com/CNFeffery/FefferyViz 1 简介 新冠疫情对很多实体经济带来冲击的同时,也给很多公司带来了新的增长 ...
- volatile使用
mq的故障延迟机制:
- 下载配置VNC
VNC通常使用连接图形化系统电脑可以安装了Gnome或者KDE yum autoremo ve tigervnc-server //移除 vncreboot //重启yum install tiger ...
- 多k8s集群管理
多集群的切换是K8s运维中比不可少的问题,常见的基于多个集群进行切换的方法有三种: 切换config文件 通过context进行集群切换 用kubecm进行集群切换 切换config文件 我们先看看放 ...