2

PerlオブジェクトをMemcachedに保存できません。を使用して、複雑なPerlオブジェクトをMemcachedサーバーに保存しようとしていますCache::Memcached。Memcachedはデフォルトで実行されるため、64MBが予約されていると思います。とにかくこの制限に達するべきではありません。

複雑な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}; }

このオブジェクトは、使用されているシリアライザーまたはいずれかが使用されているかどうかに関係なく、10MBを実行するべきではありません。

編集20_000:反復が約につながることを理解しました。Memcached内に15MBの想定メモリ。

4

1 に答える 1

3

memcachedに保存できる値の最大サイズは、通常1メガバイトです。シリアル化されたオブジェクトはそのサイズを超えていますか?

memcachedのバージョン1.4.2により、これが構成可能になりました。

memcached -I 128k # Refuse items larger than 128k.
memcached -I 10m  # Allow objects up to 10MB
于 2013-01-22T12:13:18.543 に答える