Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
redis expire:What';快速循环的目的是什么_Redis - Fatal编程技术网

redis expire:What';快速循环的目的是什么

redis expire:What';快速循环的目的是什么,redis,Redis,我正在阅读的源代码。要主动终止密钥,redis server调用事件循环中的函数 此函数有一个参数type,用于指定时间限制。类型可以是ACTIVE\u EXPIRE\u CYCLE\u FAST(快速循环)或ACTIVE\u EXPIRE\u CYCLE\u SLOW(慢速循环)。快速循环的时间限制硬编码为1毫秒(ACTIVE\u EXPIRE\u cycle\u fast\u DURATION)。慢周期的时间限制占serverCron周期的25%,默认为25毫秒。所以第一个周期比慢速周期所需

我正在阅读的源代码。要主动终止密钥,redis server调用事件循环中的函数

此函数有一个参数
type
,用于指定时间限制。类型可以是
ACTIVE\u EXPIRE\u CYCLE\u FAST
(快速循环)或
ACTIVE\u EXPIRE\u CYCLE\u SLOW
(慢速循环)。快速循环的时间限制硬编码为1毫秒(
ACTIVE\u EXPIRE\u cycle\u fast\u DURATION
)。慢周期的时间限制占serverCron周期的25%,默认为25毫秒。所以第一个周期比慢速周期所需的时间要短得多

此外,快速循环在
beforSleep
函数中调用,慢速循环在
serverCron
函数中调用。我在事件循环中绘制了关于这两个调用的图表。

我不明白快速循环的目的。为什么redis不让所有活动的过期工作都慢下来


更新:我更改了上面的图表。并非在每个循环中都调用函数serverCron。Redis默认每100毫秒执行一次serverCron()。希望它对您有所帮助(它将变得更加积极,以避免可以从键空间中删除的键占用过多内存):

//inhttps://github.com/redis/redis/blob/6.0/src/expire.c#L76
/*尝试使一些超时的密钥过期。所采用的算法具有自适应性和可扩展性
*如果没有几个过期密钥,则将使用很少的CPU周期,否则
*它将变得更具攻击性,以避免用户使用过多内存
*可以从键空间中删除的键。
*
*该功能可以执行更多或更少的工作,具体取决于“类型”
*争论。它可以执行“快速循环”或“慢速循环”。缓慢的
*循环是我们收集过期循环的主要方式:这发生在
*“server.hz”频率(通常为10赫兹)。
*
*但是,由于慢循环占用了太多的时间,因此可以退出超时。
*因此,也会调用该函数以执行快速循环
*在每个事件循环中,在beforeSleep()函数中。快速循环
*我会尽量少做一些工作,但会做得更多。
*/

我个人的理论是,快速循环可以利用空闲时间,因此慢速循环的工作量可能会减少do@Itamar谢谢你的评论。我同意你的看法。Fast cycle仅在上一个周期发生超时时执行,这意味着可能有很多密钥在那个时候过期。所以快循环可以减轻慢循环。