首页 > 编程知识 正文

redis有哪些淘汰策略,redis存储

时间:2023-05-03 13:31:54 阅读:133175 作者:4663

过期删除策略redis是key的通用设置,可以设置key的过期日期和ttl

如果简单地在重新客户端上进行命令测试,则在时间到了之后

获取此key后,将显示nil

那么,一个key过期了,它实际上是什么时候删除的呢?

当然,这个删除也不是很容易到期就直接删除的

redis过期密钥的过期删除策略

日程删除惯性删除在设置日程删除密钥过期时间的同时创建计时器。 密钥到期后,计时器会立即删除密钥。 此策略确保尽快删除过期的密钥并快速释放内存空间。

但是,一定会失败。 redis的操作频率非常高。 由于大多数密钥都是过期的,因此会发生大量的计时器运行,导致系统性能大幅下降

总的来说,该策略对内存非常友好,但对cpu非常不友好,会降低系统性能,因此不推荐

惯性删除是为了解决定时删除大量消耗CPU资源的问题,而产生了惯性删除。

获取密钥时才检查密钥的过期日期,如果过期,则删除该密钥,而不是继续关注密钥的过期日期。 简而言之,平时我不关注你。 我用你,我关注你在不在。

总的来说,惰性删除对CPU足够友好,但是对内存空间非常不友好,会造成大量内存空间的浪费

定期删除正如名字所示,是每隔一定时间删除一次

如果删除操作的执行次数过多且执行时间过长,则会导致与定时删除相同的问题。 如果由于删除操作而消耗大量cpu资源的删除操作次数过少、执行时间短,则会导致与惯性删除同样的问题。 内存资源持续消耗,无法释放。 所以定时删除最重要的是执行时间和频率的设定

默认情况下,每秒运行10次会扫描过期的密钥,但不会扫描所有密钥。 这是因为扫描时间会大幅延长。 默认情况下,每次只随机扫描20个key,同时删除这20个key中过期的key。 如果这20个密钥中过期密钥的比例超过25%,将继续扫描。 参数配置

默认情况下,每秒扫描10次,但可以在redis配置文件中更改

关于hz参数,官方不建议超过100。 否则,cpu将承受很大的压力

可以考虑两个问题:内存销毁策略为什么需要内存销毁策略

通过惯性定期删除,是否可以100%避免未删除过期密钥的情况? 如果大量插入并插入到redis中,但内存空间不足,redis会如何处理呢?有一些已经过期的key,定期扫描一直都没有扫描到它,而且这些key也一直没有被使用。 那么它们就会一直在内存中存在。同时继续向Redis不断插入新数据,最终造成内存空间不足的问题。

要解决此类问题,请访问内存淘汰策略

战略是当客户端执行命令,添加数据时,Redis会检查内存空间大小,如超过最大内存,则触发内存淘汰策略

Redis默认提供3种8种淘汰策略。

这里可以看到两个名称:lrulfu。 他们俩是什么意思呢?

他们的学名是数据驱逐策略其实是驱逐就是将数据从内存中删除掉

删除最近未使用的密钥(相对于3358www.Sina.com/小时)。 删除最近未使用的密钥(以3358www.Sina.com/频率为基准)。 可以通过修改3358 www.Sina.com/http://www.Sina.com/中http://www.Sina.com /属性值来设置不同的内存处置策略。

使用不同策略的场景1,Redis只缓存,不进行DB持久化,使用allkeys。 对于状态信息,经常访问,但数据库保持不变。

2、缓存和数据库持久化并用,使用volatile。 就像商品详细页面一样。

3、有冷热数据区分时,选择LRU或LFU。 热点新闻、话题搜索等。

4、各key被访问的概率基本相同,选择使用random。 对于企业系统,访问次数很少,删除谁也会给数据库带来很大压力。

5、基于超时时间长的丢弃数据,选择ttl。 就像微信过期的朋友的请求一样。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。