来源:http://i7q.cn/4NHBun

熟悉Redis的同学应该知道,Redis的每个Key都可以设置一个过期时间,当达到过期时间的时候,这个key就会被自动删除。

1、 DEL/SET/GETSET等命令会清除过期时间

在使用DEL、SET、GETSET等会覆盖key对应value的命令操作一个设置了过期时间的key的时候,会导致对应的key的过期时间被清除。

//设置mykey的过期时间为300s

2、INCR/LPUSH/HSET等命令则不会清除过期时间

而在使用INCR/LPUSH/HSET这种只是修改一个key的value,而不是覆盖整个value的命令,则不会清除key的过期时间。INCR:

//设置incr_key的过期时间为300s

LPUSH:

//新增一个list类型的key,并添加一个为1的值

3、PERSIST命令会清除过期时间

当使用PERSIST命令将一个设置了过期时间的key转变成一个持久化的key的时候,也会清除过期时间。

127.0.0.1:

4、使用RENAME命令,老key的过期时间将会转到新key上

在使用例如:RENAME KEY_A KEY_B命令将KEY_A重命名为KEY_B,不管KEY_B有没有设置过期时间,新的key KEY_B将会继承KEY_A的所有特性。

//设置key_a的过期时间为300s

这里篇幅有限,我就不一一将key_a重命名到key_b的各个情况列出来,大家可以在自己电脑上试一下key_a设置了过期时间,key_b没设置过期时间这种情况。

5、使用EXPIRE/PEXPIRE设置的过期时间为负数或者使用EXPIREAT/PEXPIREAT设置过期时间戳为过去的时间会导致key被删除

EXPIRE:

127.0.0.1:

EXPIREAT:

127.0.0.1:

6、EXPIRE命令可以更新过期时间

对一个已经设置了过期时间的key使用expire命令,可以更新其过期时间。

//设置key_1的过期时间为100s

在Redis2.1.3以下的版本中,使用expire命令更新一个已经设置了过期时间的key的过期时间会失败。并且对一个设置了过期时间的key使用LPUSH/HSET等命令修改其value的时候,会导致Redis删除该key。

Redis的过期策略

那你有没有想过一个问题,Redis里面如果有大量的key,怎样才能高效的找出过期的key并将其删除呢,难道是遍历每一个key吗?假如同一时期过期的key非常多,Redis会不会因为一直处理过期事件,而导致读写指令的卡顿。

这里说明一下,Redis是单线程的,所以一些耗时的操作会导致Redis卡顿,比如当Redis数据量特别大的时候,使用keys * 命令列出所有的key。

实际上Redis使用懒惰删除+定期删除相结合的方式处理过期的key。

懒惰删除

所谓懒惰删除就是在客户端访问该key的时候,redis会对key的过期时间进行检查,如果过期了就立即删除。
这种方式看似很完美,在访问的时候检查key的过期时间,不会占用太多的额外CPU资源。但是如果一个key已经过期了,如果长时间没有被访问,那么这个key就会一直存留在内存之中,严重消耗了内存资源。

定期删除

定期删除的原理是,Redis会将所有设置了过期时间的key放入一个字典中,然后每隔一段时间从字典中随机一些key检查过期时间并删除已过期的key。

Redis默认每秒进行10次过期扫描:

  1. 从过期字典中随机20个key

  2. 删除这20个key中已过期的

  3. 如果超过25%的key过期,则重复第一步

同时,为了保证不出现循环过度的情况,Redis还设置了扫描的时间上限,默认不会超过25ms。


自荐!

fastjson 添加key value_Redis中设置了过期时间的Key,那么你还要知道些什么?相关推荐

  1. 在Redis中设置了过期时间的Key,需要注意哪些问题?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:千山qianshan juejin.im/post/5d6b ...

  2. 在 Redis 中设置了过期时间的 Key,需要注意哪些问题?

    熟悉Redis的同学应该知道,Redis的每个Key都可以设置一个过期时间,当达到过期时间的时候,这个key就会被自动删除. 在为key设置过期时间需要注意的事项 1. DEL/SET/GETSET等 ...

  3. 【干货】在Redis中设置了过期时间的Key怎么办?

    熟悉Redis的同学应该知道,Redis的每个Key都可以设置一个过期时间,当达到过期时间的时候,这个key就会被自动删除. 在为key设置过期时间需要注意的事项 1. DEL/SET/GETSET等 ...

  4. 在Redis中设置了过期时间的Key注意事项

    作者:千山qianshan juejin.im/post/5d6bda096fb9a06acc009dc8 熟悉Redis的同学应该知道,Redis的每个Key都可以设置一个过期时间,当达到过期时间的 ...

  5. 设置过期时间_在Redis中设置了过期时间的Key,需要注意哪些问题?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:千山qianshan juejin.im/post/5d6b ...

  6. C#发布网站在web.config和IIS中设置Session过期时间

    C#发布网站在web.config和IIS中设置Session过期时间 web.config <system.web> <sessionState mode="InProc ...

  7. redis查看key的过期时间_面试官:你在Redis中设置过带过期时间的Key吗?

    点击上方小伟后端笔记关注公众号 每天阅读Java干货文章 熟悉Redis的同学应该知道,Redis的每个Key都可以设置一个过期时间,当达到过期时间的时候,这个key就会被自动删除. 在为key设置过 ...

  8. redis list设置过期时间_面试官:你在Redis中设置过带过期时间的Key吗?

    点击上方小伟后端笔记关注公众号 每天阅读Java干货文章 熟悉Redis的同学应该知道,Redis的每个Key都可以设置一个过期时间,当达到过期时间的时候,这个key就会被自动删除. 在为key设置过 ...

  9. 玩转Redis-干掉钉子户-没有设置过期时间的key

      <玩转Redis>系列文章 by zxiaofan主要讲述Redis的基础及中高级应用.本文是<玩转Redis>系列第[15]篇,最新系列文章请前往 公众号"zx ...

最新文章

  1. 乖乖给行人让路?学界推出无人机控制技术NMPC,可在低空中实现自主导航和避障...
  2. 计算机科学与技术python方向是什么意思-大学计算机科学与技术相关专业学习路线...
  3. lucene-5.3.1配置(win7x64)
  4. TypeScript 中的 SOLID 原则
  5. Luogu P2664 树上游戏 dfs+树上统计
  6. CLO Standalone OnlineAuth for Mac(3D可视化服装设计软件)
  7. 三菱FX1N与东元Teco N310变频器通讯实战程序
  8. java opencv 人脸相似度,opencv 比较两张图的相似度
  9. 三菱plc分拣程序_基于三菱PLC与视觉检测的快速分拣控制系统
  10. 【已成功安装但无法使用】Python 3.10.2 安装pyodbc
  11. LeetCode||颜色分类--给定一个包含红色、白色和蓝色,一共 *n* 个元素的数组,**原地**对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
  12. Docker详细学习文档
  13. 一个读者大佬精心总结的阿里、腾讯、宇宙条大厂 Offer 面经和硬核面试攻略
  14. php+html文本域,html的文本域和表单域
  15. 10个全网最具创意的聊天机器人:漫威和联合国儿童基金会都在尝试使用聊天机器人
  16. 综合布线系统在计算机信息系统中属于,计算机信息系统综合布线问题
  17. php导出word文件(二)
  18. Vue--移动端开发
  19. Wordpress响应式Git主题/响应式CMS主题模板
  20. 基于javaweb小说评价下载网站管理系统 ssm框架

热门文章

  1. layui table 滚动 键盘
  2. python的nan,NaN,NAN
  3. ECCV2018目标检测(object detection)算法总览
  4. python 路径双斜杠问题
  5. 使用face_recognition(二)目标人脸“实时”检测
  6. opencv findContours 崩溃CrtDbgBreak
  7. python多维数组筛选
  8. 【9】青龙面板系列教程之互助规则的配置
  9. SSH隧道 / SSH穿透
  10. matlab图形绘制经典案例,MATLAB经典教程第四章_图形绘制.ppt