【发布时间】:2012-09-10 02:14:48
【问题描述】:
我们正在使用 Zend Cache 和一个 memcached 后端,该后端指向一个具有 2 个缓存节点的 AWS ElastiCache 集群。我们的缓存设置如下所示:
$frontend = array(
'lifetime' => (60*60*48),
'automatic_serialization' => true,
'cache_id_prefix' => $prefix
);
$backend = array(
'servers' => array(
array( 'host' => $node1 ),
array( 'host' => $node2 )
)
);
$cache = Zend_Cache::factory('Output', 'memecached', $frontend, $backend);
过去我们在使用单个 EC2 服务器写入和读取缓存时没有注意到缓存有任何问题。
但是,我们最近推出了第二台 EC2 服务器,突然我们发现从一台服务器写入缓存并从另一台服务器读取时出现问题。两台服务器都由同一个 AWS 账户管理,两台服务器都没有单独写入或读取缓存的问题。两者使用相同的缓存配置。
服务器 A 执行 $cache->save('hello', 'message');
从服务器 A 对 $cache->load('message'); 的后续调用返回 hello 的预期结果。
但是,当 Server B 执行 $cache->load('message'); 时,我们得到 false。
就我对 ElastiCache 的理解而言,发出读取请求的服务器应该与返回的缓存值无关。任何人都可以对此有所了解吗?
【问题讨论】:
-
我认为这是一个延迟问题,您是否尝试过休眠(xxxx)然后从 B 执行 $cache->load?
-
不幸的是,事实并非如此。甚至几个小时后,从 A 中设置的值也无法从 B 中读取。
-
您使用的是哪个版本的 PHP?我认为序列化是在这里发挥作用的。尝试禁用自动序列化,看看会发生什么。不幸的副作用是您必须手动序列化不是字符串的所有内容。
-
另外,cache_id_prefix 是相同的还是生成的值?
标签: php zend-framework caching amazon-web-services amazon-elasticache