2013-01-22 43 views
2

我無法將Perl對象存儲到Memcached中。我嘗試使用Cache::Memcached將複雜的Perl對象存儲到Memcached服務器中。 Memcached在默認情況下運行,所以我認爲有64 MB保留。無論如何都不應該達到這個限制。如何將複雜的Perl對象存儲到Memcached中?

如何將複雜的Perl對象存儲到Memcached中?

以下代碼無法將對象存儲在Memcached服務器中。如果將23_171的迭代次數更改爲例如4,則沒有問題。

#!/usr/bin/perl 
############################################################################ 
# Script 
use strict; 
use warnings FATAL => 'all'; 
use Cache::Memcached; 
my $memd = Cache::Memcached->new(servers => ['127.0.0.1:11211']); 
my $obj = MyModule->new; 
$obj->add(MySubModule->new($_)) for (1 .. 23_171); 
$memd->set('obj', $obj) or die "failed"; 
$memd->disconnect_all; 
############################################################################ 
# Collector-Module 
package MyModule; 
sub new { bless { jar => [] }, $_[0]; } 
sub add { push @{ $_[0]->{jar} }, $_[1]; } 
############################################################################ 
# Entry-Module 
package MySubModule; 
sub new { bless { id => $_[1], rnd => rand($_[1]) }, $_[0]; } 
sub id { $_[0]->{id} = $_[0]->{id} // $_[1]; } 
sub rnd { $_[0]->{rnd}; } 

無論使用哪個序列化程序或任何序列化程序,此對象都不應占用10 MB,對吧?

編輯:我只是想通過20_000迭代結果到aprox。 Memcached中有15 MB假定內存。

回答

3

您可以在memcached中存儲的值的最大大小通常爲1兆字節。你的序列化對象是否超過了這個尺寸?

的memcached Version 1.4.2使這個配置:

memcached -I 128k # Refuse items larger than 128k. 
memcached -I 10m # Allow objects up to 10MB