我无法将 Perl 对象存储到 Memcached 中。我尝试使用Cache::Memcached
. Memcached 在默认情况下运行,所以我认为保留了 64 MB。无论如何都不应该达到这个限制。
如何将复杂的 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。