0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Redis 如何删除数据

科技绿洲 来源:Java技术指北 作者:Java技术指北 2023-10-09 16:01 次阅读

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

Redis 有三种策略删除过期 Key

相关命令

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

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

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

ttl key # 查看 Key 的过期时间(秒数),用不过期返回(integer) -1Key 不存在返回(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

当已用的内存超过 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 采用的过期策略

被动删除+主动删除

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10816

    浏览量

    210978
  • 数据
    +关注

    关注

    8

    文章

    6852

    浏览量

    88771
  • key
    key
    +关注

    关注

    0

    文章

    48

    浏览量

    12808
  • Redis
    +关注

    关注

    0

    文章

    371

    浏览量

    10834
收藏 人收藏

    评论

    相关推荐

    我用labSQL中的ADO Recordset Delete Record.vi 函数删除数据库中的一

    求助:我用labSQL中的ADO Recordset Delete Record.vi 函数删除数据库中的一行记录,为啥不得行呢?运行之后,数据库里面并没有删除啊?出现的问题是:ADO
    发表于 12-02 14:57

    请问LabVIEW如何删除数组中的空白元素

    请问LabVIEW如何删除数组中的空白元素还有如何把一行一行的字符串组成的数组分别填写到表格中
    发表于 02-17 13:19

    删除数组元素

    删除数组元素作为条件结构的条件输入端是怎么回事啊。。。
    发表于 03-30 15:51

    删除数组里指定的多个相同元素

    如题,如何删除数组里指定的多个相同元素,求大神指导、、、
    发表于 12-26 13:32

    在labview使用sql语句删除数据库中的重复内容出现错误,求解

    最近一直在自学使用labview控制数据库,相关的书籍资料都不多,有相同兴趣的欢迎沟通互相学习使用labsql一直出现问题,之前排序的运行成功却发现只是对查询数据进行排序不能对本身这次需要删除数据库中重复内容,我查找了相关语句,
    发表于 03-07 12:30

    删除数字字符串无效零

    看到有人问怎么删除数字字符串的无效零,所以在这里发一下!可以像图中这样使用
    发表于 01-03 19:42

    删除数组中的零元素

    提供了两种删除数组零元素的方法,前一种略麻烦,重新设计了一种,可能是我知道的最简单粗暴的版本了吧
    发表于 03-22 22:37

    《Visual C# 2008程序设计经典案例设计与实现》---动态删除数据数据信息

    《Visual C# 2008程序设计经典案例设计与实现》---动态删除数据数据信息.zip
    发表于 06-25 16:48

    如何使得redis中的数据不再有

    嵌入式Linux系统重启后如何使得redis中的数据不再有今天在工作中遇到一个问题:网页展示redis中的数据,然而再Linux系统重启后网页还能展示
    发表于 11-05 08:50

    JAVA教程之创建与删除数据库中的表

    JAVA教程之创建与删除数据库中的表,很好的JAVA的资料,快来学习吧。
    发表于 04-13 09:47 3次下载

    手机如何永久删除数据

    为了保护隐私,在切换旧手机之前,需要完全清除手机数据。它一直是我们恢复出厂设置的最常用方法。恢复出厂设置的旧手机,其他人仍然可以恢复已删除的照片、数据。那么如何彻底删除旧手机上的
    的头像 发表于 03-01 14:53 2.9w次阅读

    如何才能删除SQL数据局镜像

    SQLSERVER删除数据库镜像 SQLServer删除数据库镜像,其实这之前有个很诡异的问题。..在数据库镜像断开后,如何从新建立镜像的连接呢?
    发表于 09-26 17:51 18次下载

    微软「全息云存储」来了!玻璃做介质,用光记录或删除数据

    你能想象吗,未来有望实现 全系存储了!什么意思呢,就是利用光来记录数据页、玻璃作为介质实现云上存储。全息晶体可以填充密集的数据,若想删除数据,只需用紫外光就能擦除,也太酷了吧! 这是微软研究院的一项
    的头像 发表于 10-27 13:39 3093次阅读

    Redis数据清理策略

    本文整理 Redis数据清理策略所有代码来自 Redis version :5.0, 不同版本的 Redis 策略可能有调整
    发表于 09-19 14:24 352次阅读
    <b class='flag-5'>Redis</b> 的<b class='flag-5'>数据</b>清理策略

    Redis删除策略和内存淘汰机制介绍

    执行之前都会调用 expireIfNeeded函数对其进行检查,如果过期,则删除该键,然后执行键不存在的操作;未过期则不作操作,继续执行原有的命令。 定期删除:由Redis.c/activeExpireCycle 函数实现,函数
    的头像 发表于 10-09 11:06 465次阅读