当钥匙到达到期时间时,兄弟代码会立即删除吗?
让我们首先谈论结论,它不会立即删除。Redis有两种删除过期数据的策略:
REDIS 2.4版本中的命令不是很准确,它可能在零和一秒钟之间。
从Redis 2.6开始,到期误差为0到1毫秒。
该说明可以设置指定的键以期到期。如果未设置到期时间,除非我们明确删除该密钥,否则键将始终存在,例如执行指令。
被称为“狡猾的兔子死了,狗烹饪”被用来杀死,这是35岁时“毕业”的原因。
如此恐慌...
从Redis版本7.0.0开始:添加选项:Harmony,选项。
在中间或集群体系结构中,这两台机器的时钟没有严重同步。有什么问题吗?
关键到期信息由UNIX绝对时间戳表示。
为了使到期操作正常运行,必须确保机器之间的时间稳定和同步,否则到期时间将不准确。
例如,在RDB传输中出现了具有严重和非同步机的两个时钟。从奴隶的时间设置为接下来的2000秒。如果主机集中设置为1000秒以生存,则当从加载RDB时,机器时间设置为未来的2000 s),并且不会等待1000 s才能到期。
惰性删除很简单,也就是说,当客户端的请求查询时,检查它是否到期以及是否到期时,请删除它。
例如,当Redis收到客户端的请求时,它将检查它是否已过期,并在其到期时删除。
删除已过期数据的主动性将提供给每个访问请求。
实现的实现,源代码路径:。
这还不足以确定客户端的访问是否到期不够,因为某些密钥会到期,但是将来不会访问任何人。如何删除这些数据?
不要让这些数据“利用坑,没有狗屎”。
SO值定期删除,即Redis每1秒运行10次(每100毫秒执行一次)。每次随机提取一些设置到期时间的键,检查是否到期,并在找到它时直接删除。
注意:不要检查所有库,所有键,而是检查一定数量的键。
具体步骤如下:
删除源代码。
这也意味着,在任何时候,过期的密钥数量等于每秒的最大写作操作量。
为什么不检查所有设置到期时间的钥匙呢?
您认为,假设100 W键存储在Redis中,所有设置时间,每100毫秒检查100 W键,则所有CPU在检查到期键中浪费了所有CPU,并且Redis被放弃了。
注意:无论是常规的还是惰性的删除。删除数据后,删除说明将生成到节点。
兄弟代码,如果数据过期的数据太多,则无法完全删除常规删除(到期到期到期的到期仍然超过25%),客户将永远不会要求这些键是,无法删除惰性删除。如何?
它会导致重新记忆的精疲力尽吗?我该如何打破它?
这个问题很好,答案是通过记忆消除机制。
就是今天。如果您说太多了,您可以轻松地在知识的大量知识中稻草到死亡,并保持生命紧张。至于记忆消除机制的细节,请参阅分解。
参考
原始:https://juejin.cn/post/7098256190739578911