Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Inconsistent cache values using Zend Cache with AWS ElastiCache across multiple servers

We are using Zend Cache with a memcached backend pointing to an AWS ElastiCache cluster with 2 cache nodes. Our cache setup looks like this:

$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); 

We have not noticed any problems with the cache in the past when using a single EC2 server to write and read from the cache.

However, we have recently introduced a second EC2 server and suddenly we're seeing issues when writing to the cache from one server and reading from another. Both servers are managed by the same AWS account, and neither server has issues writing to or reading from the cache individually. The same cache configuration is used for both.

Server A executes $cache->save('hello', 'message');

Subsequent calls to $cache->load('message'); from Server A return the expected result of hello.

However, when Server B executes $cache->load('message');, we get false.

As far as my understanding of ElastiCache goes, the server making the read request should have no bearing on the cache value returned. Can anyone shed some light on this?

like image 604
michaelxor Avatar asked Sep 17 '12 20:09

michaelxor


1 Answers

Can you tell what hash_strategy you are using for memcache? I've had problems in the past using the default standard but everything has been fine since changing to consistent:

http://php.net/manual/en/memcache.ini.php#ini.memcache.hash-strategy

like image 190
Jason Avatar answered Sep 20 '22 15:09

Jason