0


Redis的数据删除策略

一、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 资源维护内存(清除过期数据)
标签: redis 数据库 java

本文转载自: https://blog.csdn.net/m0_67942533/article/details/126449514
版权归原作者 崇令 所有, 如有侵权,请联系我们删除。

“Redis的数据删除策略”的评论:

还没有评论