Redis的数据删除策略

Redis是一款高性能的内存数据库,支持多种数据类型并提供持久化。针对过期数据,Redis提供了三种删除策略:定时删除(立即删除但可能影响性能)、惰性删除(访问时检查并删除)和定期删除(周期性随机抽查)。这些策略平衡了内存使用和CPU资源的占用,以适应不同的应用场景需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Redis简介

1. 概念:

Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库。

2. 特征:

        ①数据间没有必然的关联关系;

        ②内部采用单线程机制进行工作;

        ③高性能,官方提供测试数据,50个并发执行100000 个请求,读的速度是110000 次/s,写的速度是81000次/s;

        ④多数据类型支持

            字符串类型 string

            列表类型 list

            散列类型 hash

            集合类型 set

            有序集合类型 sorted_set

        ⑤持久化支持。可以进行数据灾难恢复

二、Redis删除策略

1. 什么是过期数据?

Redis是一种内存级数据库,所有数据均存放在内存中,内存中的数据可以通过TTL指令获取其状态。

  • XX :具有时效性的数据,通过下列命令来定义:

       &&     setex key seconds value

  &&      expire key seconds

       &&      expireat key timestamp

       &&      pexpire key milliseconds

       &&      pexpireat key milliseconds-timestamp

在这里插入图片描述

 

  • -1 :永久有效的数据

在这里插入图片描述

 

  • -2 :已经过期的数据或被删除的数据或未定义的数据

在这里插入图片描述

过期的数据是否真的被删除了?

当 redis 需要处理某条数据的时候,发送一条指令给 CPU,CPU 轻轻松松就可以搞定,相对来说不会占用太多时间,但是如果有多个 redis 同时发送了非常多的增删查改指令过来,那 CPU 压力就会变得非常大,造成性能下降,所有操作都在排队等着 CPU 空闲处理指令。

那么,我们在这里能不能做一个优化,查数据,加数据,改数据这部分还是得正常进来处理,但是过期数据貌似就不是一个很着急的事情了。如果内存空间也不是很紧张,没达到阈值,那可以先放在内存里,等有空的时间再删掉。也就是说,当这些数据过期以后,实际上还是先放在内存里等到要删的时候再去删它。而具体怎么删,Redis 会提供相应的删除策略。

2. Redis提供的删除策略

Redis 提供了三种删除策略:a. 定时删除 | b. 惰性删除 | c. 定期删除

定时删除

①含义:当 key 设置过期时间的时候,创建一个定时器事件,当 key 过期时间到达时,由定时器任务立即执行对 key 的删除操作,删除操作先删除存储空间的,再移除掉 expire 的 key

②优点:节约内存,到时就删除,快速释放掉不必要的内存占用

③缺点:CPU 压力大,无论 CPU 此时负载量多高,都会去占用 CPU 进行 key 的删除操作,会影响 Redis 服务器响应时间和吞吐量,是一种比较低效的方式

④总结:用 CPU 性能换取内存空间,时间换空间

惰性删除

①含义:数据到达超时时间的,不立即处理,等下次访问该数据的时候,再去删除(操作会执行expireIfNeeded()函数去检查)

②优点:不占用 CPU 节约 CPU 性能,只在获取访问key的时候才判断是否过期,过期则删除,只会删除当前获取的这一个key,其他的key还是保持原样

③缺点:内存占用大,如果一直没有获取它,那么数据就会长期占用内存空间,当有大量的key没有被使用到,也造成了大量内存浪费,对内存数据库来说,也不太友好

④总结:空间换时间

定期删除

前面说的两种方案1.时间换空间2.空间换时间都是两个极端方法,为避免前面方案带来的问题,Redis 引入了定期删除策略(是他们的一个比较折中的方案)

①含义:周期性轮询 Redis 库中的时效性数据,采取随机抽取的策略,利用过期数据占比的方式控制删除频度。

②优点:a.CPU性能占用设置有峰值,检测频度可自定义设置;b.内存压力不是很大,长期占用内存的冷数据会被持续清理.

③总结:CPU 性能占用设置有峰值,检测频度可自定义设置,内存压力不是很大,长期占用内存的冷数据会被持续清理(周期性随机抽查,重点抽查)

删除策略对比

  1. 定时删除(时间换空间)
    • 节约内存无占用
    • 不分时段占用 CPU 资源,频度高
  2. 惰性删除(空间换时间)
    • 内存占用高
    • 延迟执行,不会一直占用CPU资源,CPU 压力小,频度低
  3. 定期删除(周期性随机抽查)
    • 内存定期随机清理
    • 每秒花费固定 CPU 资源维护内存(清除过期数据)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值