Redis过期键删除策略

Redis中所有的键都可以设置过期策略,就像是所有的键都可以上"生死簿",上了生死簿的键到时间后阎王就会叉掉这个键。同一时间大量的键过期,阎王就会忙不过来。同时因为Redis是单线程的,导致阎王的处理时间会变得很长,而且处理繁忙,Redis就会出现卡顿现象。

Redis有三种策略删除过期Key

相关命令

expire key seconds  # 过期时间为秒数,key不存在时返回(integer) 0,key存在的时返回(integer) 1

pexpire key milliseconds # 同expire,设置的过期时间为毫秒数

setex key seconds value # 只能设置字符串的过期时间

ttl key # 查看Key的过期时间(秒数),用不过期返回(integer) -1,Key不存在返回(integer) -2

pttl key # 同ttl,返回毫秒数

过期Key

Redis的每个设置了过期时间的Key都会放在一个独立的字典中,用于遍历删除。

过期策略

被动删除

Key在被操作时,Redis主动检查Key是否过期,过期则删除,返回nil

  1. 对CPU友好,只有Key在被操作时删除,不会浪费CPU时间
  2. 对内存不友好,如果同时有大量的Key过期,这些Key在被使用之前不会被删除,就会浪费内存

主动删除

Redis会周期性的随机扫描一批设置了过期时间的Key并进行处理,Redis每秒进行10次过期扫描会做的操作有:

  1. 随机扫描100个设置了过期时间的Key
  2. 删除所有发现的过期Key
  3. 如果删除的Key超过1/4则重复步骤1
hz 10

Redis除了设置每秒10次的扫描频率之外,还设置了每次扫描不会超过25ms的上限,以防出现过度循环扫描,导致线程卡死。

maxmemory

# maxmemory <bytes>

当已用的内存超过maxmemory 配置的内存时,会触发主动清除策略

# maxmemory-policy noeviction
  1. noeviction 永不过期策略,当已用内存超过maxmemory配置时,写操作将返回错误,读操作和del操作可以继续服务。
  2. volatile-lru 只删除设置了过期时间的Key,使用频率越少的Key优先删除,不会对没有设置过期时间的Key删除
  3. volatile-ttl 和上面一样,只删除设置过期时间的Key,TTL过期时间越少优先删除
  4. volatile-random 随机删除快要过期的Key
  5. allkeys-lru 和lru一样,删除所有的Key,没有设置过期时间的Key也会被删除
  6. allkeys-random 和上面一样,删除掉随机的Key

Redis采用的过期策略

被动删除+主动删除

结语

本人深知水平有限,欢迎指正本文错误之处。


一文了解:Redis过期键删除策略的更多相关文章

  1. Redis 过期键删除策略

    Redis 中数据库键的过期时间都保存在过期字典中,当一个键过期了,Redis 存在三种不同的删除策略:定时删除.惰性删除和定期删除 定时删除 定义 在设置键的过期时间的同时创建一个计时器,让定时器在 ...

  2. redis过期键删除策略以及大key删除方法

    今天遇到了一个前同事挖的坑,刷新缓存中商品信息时先让key过期,然后从数据库里取最新数据然后再放到缓存中,他是这样写的 redisTemplate.expire(CacheConst.GOOGS_PR ...

  3. redis中key的过期键删除策略

    Redis过期键删除策略 Redis key过期的方式有三种: 被动删除:当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key 主动删除:由于惰性删除策略无法保证冷数据被及时删 ...

  4. Redis系列(五):Redis的过期键删除策略

    本篇博客是Redis系列的第5篇,主要讲解下Redis的过期键删除策略. 本系列的前4篇可以点击以下链接查看: Redis系列(一):Redis简介及环境安装 Redis系列(二):Redis的5种数 ...

  5. Redis的过期键删除策略

    文章首发于公众号:蘑菇睡不着,欢迎来看看 前言 Redis 中都是键值对的存储形式,键都是字符串类型的,而值有很多种类型,如 string.list.hash.set.sorted set等类型.当设 ...

  6. 【Redis】过期键删除策略和内存淘汰策略

    Redis 过期键策略和内存淘汰策略 目录 Redis 过期键策略和内存淘汰策略 设置Redis键过期时间 Redis过期时间的判定 过期键删除策略 定时删除 惰性删除 定期删除 Redis过期删除策 ...

  7. redis的3种过期键删除策略

    Redis的过期键的过期时间都保存在过期字典中,过期键的删除策略有三种,分别是定时删除.惰性删除和定期删除. 定时删除 定时删除策略,是指在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时 ...

  8. redis过期键的策略

    一.过期时间设置: 127.0.0.1:6379> expire key seconds //设置键的过期时间为多少秒 127.0.0.1:6379> setex key seconds ...

  9. redis学习笔记——Redis过期键的删除策略

    Redis过期键的删除策略 对于过期键一般有三种删除策略 定时删除:在设置键的过期时间的同时,创建一个定时器(timer),让定时器在键的过期时间来临时,立即执行对键的删除操作: 惰性删除:放任键过期 ...

随机推荐

  1. MySQL 8.0 information_schema系统库的改进

    目录 information_schema有何用? mysql8.0 之前的查询方式 mysql8.0 开始的查询方式 测试5.7和8.0不同版本访问I_S库的性能 结论 information_sc ...

  2. vmware的卸载

    vmware出了点问题,在控制面板里或者是360都没法删除干净.在网上搜了点资料,找到一些删除的方法,参考链接如下: http://zhidao.baidu.com/question/30902992 ...

  3. STM32F072从零配置工程-基于HAL库的串口UART中断配置

    先上一个采用串口直接传输的Demo: 此处的思路是完全采用HAL库来实现的,核心是运用HAL_UART_Transmit_IT和HAL_UART_Receive_IT两个函数来实现的,可以作为一个De ...

  4. 小米OJ 12. 找出可能的合的组合

    利用dfs解决,从给出的数组左边或右边开始遍历,对每一个数字进行判断,有三种情况: 1. 加上当前数字的值,遍历下一个数字 2. 加上当前数字的值,继续遍历该数字 3. 不加上当前的数字的值,遍历下一 ...

  5. [git] 基础命令笔记

    --内容整理自廖雪峰的GIT教程-- git status 查看当前工作区状态,显示未跟踪的文件以及未上传的修改记录 git init 使当前文件夹变成Git可以管理的仓库 git add xxx 将 ...

  6. python函数对象-命名空间-作用域-02

    函数对象 函数是第一对象: # 函数名指向的值可以被当做参数传递 函数对象的特性(*****灵活运用,后面讲装饰器会用到) 函数名可以像变量一样被传递 # 变量可以被传递 name = 'jason' ...

  7. C#中Tuple的使用

    鉴于MSDN上面的机器翻译实在太烂,还是自己翻译吧,虽然麻烦了点(-_-). 定义:元组是具有 特定数量和序列 的元素 的数据结构  (注意断句哈!) 元组通常有四种使用方式︰ 一.表示一组数据 例如 ...

  8. 《VR入门系列教程》之4---运行平台

    运行平台     大多数的VR应用都可以在目前多数的PC和手机上运行,基本上一个不太旧的PC或者配置好点的笔记本电脑都可以正常运行Oculus Rift,如果手机的CPU和显卡不错的话也可以有很好的V ...

  9. @GetMapping、@PostMapping和@RequestMapping的区别

    @GetMapping 用于将Http Get 请求映射到特定处理程序方法的注释.具体来说就是:@GetMapping是一个作为快捷方式的组合注释 @RequestMapping(method = R ...

  10. ACM线性基学习笔记

    https://www.cnblogs.com/31415926535x/p/11260897.html 概述 最近的几场多校出现了好几次线性基的题目,,会想起之前在尝试西安区域赛的一道区间异或和最大 ...