perl - 如何将复杂的 Perl 对象存储到 Memcached 中?

标签 perl memcached

我无法将 Perl 对象存储到 Memcached 中。我尝试使用 Cache::Memcached 将复杂的 Perl 对象存储到 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。

最佳答案

可以在 memcached 中存储的值的最大大小通常为 1 MB。您的序列化对象是否超出了该大小?

Version 1.4.2 memcached 使其可配置:

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

关于perl - 如何将复杂的 Perl 对象存储到 Memcached 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14458071/

相关文章:

sql - 需要数据库设计建议

支持 Memcache 的 MySQL 集群

PHP Memcache 连接到 couchbase 但不能做任何其他事情

php - WAMPSERVER php_memcache 扩展

perl - 如何在 Perl 中解决此警告

perl - Perl的caller()函数返回错误的行号

perl - 如何在 perl 中检索 png 文件的高度和宽度属性

c++ - 适用于 Windows 的 Memcached 客户端库

perl - 如何在推送中使用 Perl 默认数组变量 @_?

perl - 让 LWP Useragent 更快