首页 > 数据库 >redis之内存淘汰策略和过期删除策略

redis之内存淘汰策略和过期删除策略

时间:2023-03-12 19:12:41浏览次数:61  
标签:限定值 策略 删除 过期 redis 内存 key

前言

redis是基于内存的,如果内存超过限定值(redis配置文件的maxmemory参数决定redis最大内存使用量),导致新的数据存不进去,此时redis会根据淘汰策略删除一些数据

 

一 内存淘汰策略

淘汰策略由redis配置文件的maxmemory-policy参数决定设置,默认为no-eviction模式

 

淘汰策略的执行过程

1) 执行写请求时,redis会检查内存使用情况,内存使用超过限定值,按照淘汰策略删除key

2) redis写入新数据

 

1 noeviction

当写入新数据后的内存超过限定值时,写请求直接返回错误,只读请求可以正常执行,默认策略

 

2 allkeys-lru

当写入新数据后的内存超过限定值时,从所有key中使用LRU算法(最近最少使用算法)淘汰最久没有使用过的key

 

3 volatile-lru

当写入新数据后的内存超过限定值时,从设置了过期时间的key中使用LRU算法淘汰最久没有使用过的key

 

4 allkeys-random

当写入新数据后的内存超过限定值时,从所有key中随机淘汰key

 

5 volatile-random

当写入新数据后的内存超过限定值时,从设置了过期时间的key中随机淘汰key

 

6 volatile-ttl

当写入新数据后的内存超过限定值时,从设置了过期时间的key中根据过期时间淘汰key,越快过期越早淘汰

 

7 allkeys-lfu

当写入新数据后的内存超过限定值时,从所有key中使用LFU算法(最少频率访问算法)淘汰使用频率最低的key

 

8 volatile-lfu

当写入新数据后的内存超过限定值时,从设置了过期时间的key中使用LFU算法淘汰使用频率最低的key

 

二 过期删除策略

前面的八种淘汰策略都是在内存超过限定值才会使用,当内存没有达到限定值,redis也会使用策略删除过期的key

 

1 定时删除

key设置了过期时间,一旦过期立即删除

 

优点

key一旦过期就会立即删除,不会占用内存

 

缺点

过期key较多时,删除key会占用CPU时间,影响服务器的响应时间,吞吐量,性能

 

2 惰性删除

过期key不会马上被删除,而是继续保存在内存中,当key被访问时检查key的过期时间,若已过期则删除

 

优点

只在访问时才会对检查key的过期时间,没使用的key不会占用CPU的时间去检查过期时间,不会影响服务器的响应时间,吞吐量,性能

 

缺点

没有被访问的过期key继续保存在内存中,导致内存不会被释放,消耗内存资源

 

3 定期删除

每隔一段时间(时间可以自行设置,redis配置文件的hz参数表示1s执行多少次定期删除策略,默认值10),随机抽取设置了过期时间的key检查它们的过期时间,删除已过期的key

 

优点

可以指定频率来减少删除操作对CPU性能的影响

定期删除也能释放没有被访问的过期key占用的内存

 

缺点

频率高影响CPU的性能

频率低过期key占用的内存不会及时释放

标签:限定值,策略,删除,过期,redis,内存,key
From: https://www.cnblogs.com/junffzhou/p/16997776.html

相关文章

  • java线程池使用小技巧:自定义拒绝策略
    java线程池默认提供了几种拒绝策略:这几个策略都实现了RejectedExecutionHandler,拿DiscardOldestPolicy来说,查看源码:核心代码只有2行:e.getQueue().poll()从列表里弹......
  • 策略路由
    作用:支持多个路由表加路由查看所有的路由表:iprulels值越小优先级越高查看main路由表里面的路由:iprstablemainmain路由表的内容就是route-n的内容......
  • MyBatisPlus中进行通用CRUD全局策略配置
    实现通过全局策略配置,开启下划线到驼峰命名的支持,全局配置主键策略,全局配置表明映射前缀。打开项目的applicationContext.xml添加bean<!--定义MybatisPlus的全局策略配置--......
  • P1075 [NOIP2012 普及组] 质因数分解 提交 333.88k 通过 126.26k 时间限制 1.00s 内存
    P1075[NOIP2012普及组]质因数分解[NOIP2012普及组]质因数分解题目描述已知正整数n是两个不同的质数的乘积,试求出两者中较大的那个质数。输入格式输入一个正整......
  • redis
    为什么要选择redis因为redis快Redis为什么速度很快1.数据存放在内存中-------内存的读写速度是磁盘(数据库)的一百倍左右。2.用C语言实现------C语言更底层,执行速度相对......
  • 通俗理解文本生成的常用解码策略
    目录:背景简介解决的问题解码策略StandardGreedySearchBeamSearchSamplingTop-kSamplingSamplingwithTemperatureTop-p(Nucleus)Sampling代码快览......
  • 路飞:redis之列表(List)类型、redis之hash(字典)类型、redis其他方法(所有类型通用的方法)、r
    目录一、redis之列表(List)类型二、redis之hash(字典)类型三、redis其他方法(所有类型通用的方法)四、redis管道五、django中使用redis方式一方式二方案一方案二六、celery介绍......
  • 【教学典型案例】01.redis只管存不管删除让失效时间删除的问题
    目录​​一:背景介绍​​​​二:redis​​​​1)redis数据类型​​​​①String(字符串)​​​​②Hash(哈希)​​​​③List(列表)​​​​④Set(集合)​​​​2)缓存同步​​​​①设......
  • redis数据类型-set类型
    不存在重复元素的集合常用场景去重用户画像标签常用命令SADDkeymember...为set增加元素SCARDkey返回set中元素的数量SDIFFkey1key2返回两个set的差......
  • 内存操作函数详解
    这是一篇介绍内存操作函数的博客,包含memcpy、memmove、memcmp、memset的具体介绍及模拟实现,也与相似的字符串操作函数进行了比较。一、MSDN中的注解1、memcpy在缓冲区......