如何根据年龄删除Perl哈希或数组项?

Dmy*_*nko 2 algorithm perl

如何删除我不感兴趣的数组项?如果我愿意离开他们 - 我的记忆会被不必要的物品所淹没.

我需要在Perl中实现一项任务.一个文件不断填充包含以下内容的消息:

 "IP - URL"
Run Code Online (Sandbox Code Playgroud)

我需要不断读取这个文件并测量是否有超过,比如五个,相同的IP - URL对,比如说,五秒间隔.

如果我每五秒从最后一个位置读取文件并计算重复数据,那么我可以遇到五秒钟内有八个相同线对的情况,但在第一次读取时有四个,另外四个在五秒钟后第二次读取.因此,我需要检查最后五个重复行之间的间隔.

我能做什么:

$pairs[$ip_url_line] = ['time-stamp',....,'time-stamp-N']
Run Code Online (Sandbox Code Playgroud)

然后获取此哈希键的最后五个数组项并计算时移.如果它超过五秒 - 做一些事情.

当然,我可以遍历循环中的所有哈希元素和所有数组项,并检查它是否超过5秒,但它太资源太昂贵了.

hob*_*bbs 5

  1. 按顺序存储每个IP地址的时间戳.无论如何你可能会这样做.
  2. 每当您获得日志行并添加新条目时,请在检查有多少条目之前删除那里的任何陈旧条目.你可以轻松地做到grep.
  3. 定期(每分钟一次?)从哈希中删除最后(最新)时间戳超过5分钟前​​的所有IP地址,因为这意味着所有条目都超过5分钟且该地址未被查看一会儿.

它很简单,很容易证明是正确的,它试图避免一次做太多的工作,并且它会让你的桌子变得不合理地大.步骤3的间隔为1分钟,没有条目可能超过11分钟.(如果在00:00:00添加了1.2.3.4的第一个条目,则可以添加最新的条目而不会将第一个条目添加为00:04:59.最新的步骤3扫描可以在不删除的情况下运行整个数组将是00:09:58;假设最坏的情况,下一次扫描将在00:10:58.)如果你可以在内存中保留11分钟的数据,那你就是金色的.