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 上限时触发内存淘 ...
随机推荐
- Spring Cloud配置中心之Consul
Consul不仅可以作为Spring Cloud中服务的注册中心,也可以作为其配置中心,这样一个系统就可以实现服务发现和统一配置,减少系统维护的麻烦,其中在使用Consul作为配置中心使用的过程中可以 ...
- 【开源】.net微服务开发引擎Anno开源啦
1.Anno是什么? Anno是一个微服务框架引擎.入门简单.安全.稳定.高可用.全平台可监控.依赖第三方框架少.底层通讯RPC(Remote Procedure Call)采用稳定可靠经过无数成功项 ...
- python-基础入门-2
这里介绍两个,相当于c中的scanf函数 第一个raw_input 1 age=raw_input("how old are you ") 2 print "you ar ...
- 关于Intege.valueOf()的使用
原文链接:https://blog.csdn.net/weixin_37650458/article/details/85212730 1.Integer. valueOf()方法的作用 In ...
- win10一行代码搭建本地html项目
最近玩了下web项目,需要部署到本地查看效果. 一:准备 1.安装python或者安装node.js 2.html项目文件 二:python搭建 1.进入html文件的路径 2.通过python命令部 ...
- 【操作系统】银行家算法实现(C语言)
[操作系统]银行家算法实现(C语言) 注意:本人编码水平很菜.算是自己的一个总结.可能会有我还没有发现的bug.如果有人发现后可以指出,不胜感激. 1.银行家算法: 我们可以把操作系统看作是银行家,操 ...
- 一口气带你读懂80年IT发展史
计算机的发展历史有多长?真正意义上的计算机诞生,距今也只有80多年的时间.80年,对于每一个人来说,是很长的时间,但对于整个历史来说,只是短短的一瞬间.这八十多年只是整段历史中的一粒尘埃罢了,但却对这 ...
- 使用Python过程出现的细节问题:TypeError: not enough arguments for format string
今天使用字符串格式化时,遇到的一点小问题:调用这个方法解释器出错了:TypeError: not enough arguments for format string def ll(name,age) ...
- 40 张图带你搞懂 TCP 和 UDP
前言 欢迎阅读「程序员cxuan」 的文章,从今往后,你就是我的读者了. 我的 github bestJavaer 已经收录此文章,目录在 https://github.com/crisxuan/be ...
- Cys_Control(三) MTextBox
一.查看TextBox原样式 通过Blend查看TextBox原有样式 <Window.Resources> <SolidColorBrush x:Key="TextBox ...