怎么删掉复述中的过期的关键

介绍

这篇文章将为大家详细讲解有关怎么删掉复述中的过期关键,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

最近我们在复述,集群中发现了一个有趣的问题。在花费大量时间进行调试和测试后,通过更改键过期,我们可以将某些集群中的复述,内存使用量减少25%。

Twitter内部运行着多个缓存服务。其中一个是由复述,实现的。我们的复述,集群中存储了一些Twitter重要的用例数据,例如展示和参与度数据,广告支出计数和直接消息。

<强>问题背景,,,,,,,

早在2016年初,Twitter的缓存团队就对复述,集群的架构进行了大量更新.Redis发生了一些变化,其中包括从复述,2.4版到3.2版的更新。

在此更新后,出现了几个问题,例如用户开始看到内存使用与他们的预期或准备使用的内存不一致,延迟增加和关键清除问题。key的清除是一个很大的问题,这可能导致本应持久化的数据可能被删除了,或者请求发送到数据原始存储。

<强>初步调查

受影响的团队和缓存团队开始进行初步的调查。我们发现延迟增加与现在正在发生的关键清除有关。当复述,收到写入请求但没有内存来保存写入时,它将停止正在执行的操作,清然除键后保存新键。

但是,我们仍然需要找出导致这些新清除的内存使用量增加的原因。

我们怀疑内存中充满了过期但尚未删除的关键。有人建议使用扫描,扫描的方法会读取所有的钥匙,并且让过期的关键被删除。

在复述中,主要有两种过期方式,主动过期和被动过期。扫描将触发关键的被动过期,当读取钥匙时,TTL将会被检查,如果TTL已过期,TTL会被删除并且不返回任何内容。

复述,文档中描述了版3.2中本的关键的主动过期。key的主动过期以一个名为activeExpireCycle的函数开始。它以每秒运行几次的频率、运行在一个称为cron的内部计时器上。

activeExpireCycle函数的作用是遍历每个密钥空间,检查具有TTL集的随机kry,如果满足过期kry的百分比阈值,则重复此过程直到满足时间限制。

这种扫描所有关键的方法是有效的,当扫描完成时,内存使用量也下降了。似乎复述,不再有效地使关键过期了。

但是,当时的解决方案是增加集群的大小和更多的硬件,这样关键就会分布得更多,就会有更多的可用内存。这是令人失望的,因为前面提到的升级复述的项目通过提高集群的效率降低了运行这些集群的规模和成本。

关于删掉复述中的过期关键的方案就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。

怎么删掉复述中的过期的关键