Perl中的键值存储

时间:2011-04-19 17:29:40

标签: perl

我希望这个问题仍然是主题,但最近我找到了一个用Perl编程的键值存储。它非常简单,基于RAM,我认为它只是设置并获得了键的“过期”选项。我也认为它同时带有XS和纯Perl版本。

我现在已经搜索了很长一段时间,我不确定它是在CPAN还是我在GitHub上看到它。也许有人知道我在说什么。

4 个答案:

答案 0 :(得分:1)

如果您可以解释模块在这方面的特殊功能,那么缩小范围可能会有所帮助。如果您希望通常使用缓存实现某些功能,我会指向CHI,这基本上是一个包含多个缓存驱动程序的常见API。

答案 1 :(得分:0)

你的意思是Cache吗?它可以在很多地方存储键/值对,包括共享内存。

答案 2 :(得分:0)

听起来你在描述Memcached。 CPAN上有Perl interface

答案 3 :(得分:0)

我过去曾使用过Tie::Cache,效果非常好。它创建了一个绑定的哈希变量,当它超出配置的最大密钥数时,它表现出LRU行为。

my $cache_size = 1000;
use vars qw(cache); %cache = ();
tie %cache, 'Tie::Cache', $cache_size;

从这里,您可以在%缓存中存储哈希/值对(当然,值侧可以是引用),如果它的大小增加到1000个密钥,LRU密钥将被删除,因为添加了更多。

在我的使用中,我将右侧存储为包含缓存值的arrayref以及缓存条目的时间戳;我的缓存引用代码检查时间戳并删除密钥而不使用它,如果条目不够新:

sub getCacheMatch {
  my $check_value = shift;
  my $timeout = 600; # 10 minutes

  # Check cache for a match.
  my ($result, $time_cached);
  my $now = time();
  my $time_cached;
  my $cache_entry = $cache{$check_value};
  if ($cache_entry) {
    ($result, $time_cached) = @{$cache_entry};
    if ($now - $time_cached > $timeout) {
      delete $cache{$check_value);
      return undef;
    } else {
      return $result;
    }
  }
}

我在代码中的其他位置更新缓存,如下所示:

$url{$cache_checkstring} = [$value_to_cache, $now];