问题
Am trying to connect created amazon elastiCache cluster endpoint using memcache-client. But am getting the error
MemCache::MemCacheError: No connection to server (testcachecluster.u098ed.cfg.us
e1.cache.amazonaws.com:11211 DEAD (Timeout::Error: execution expired), will retr
y at 2013-06-21 11:34:15 +0530)
from C:/ProgramData/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/me
mcache-client-1.8.5/lib/memcache.rb:863:in `with_socket_management'
from C:/ProgramData/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/me
mcache-client-1.8.5/lib/memcache.rb:370:in `block in set'
from C:/ProgramData/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/me
mcache-client-1.8.5/lib/memcache.rb:886:in `with_server'
from C:/ProgramData/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/me
mcache-client-1.8.5/lib/memcache.rb:361:in `set'
from (irb):5
from C:/ProgramData/RailsInstaller/Ruby1.9.3/bin/irb:12:in `<main>'
But using localhost instread of amazon elastiCache cluster endpoint am getting correctly.
irb(main):006:0> m = MemCache.new('localhost:11211')
=> <MemCache: 1 servers, ns: nil, ro: false>
irb(main):007:0> m.set 'abc', 'xyz'
=> "STORED\r\n"
irb(main):008:0> m.get 'abc'
=> "xyz"
irb(main):009:0>
回答1:
Ok, for me, the problem was the security groups. You can only access Elasticache nodes from ec2 instances that have a security group that is listed in the Elasticache security group.
So for me, my ec2 instance has a security group of "web". In elasticache, I then added "web" to the "default" elasticache security group.
Further explanation here: http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/CacheSecurityGroup.html
Also, try using either of these two gems:
https://github.com/mperham/dalli
https://github.com/ktheory/dalli-elasticache
I'm using the latter and it works great because it uses autodiscovery of the nodes.
来源:https://stackoverflow.com/questions/17228902/using-memcache-client-with-ruby