使用带ruby的memcache客户端

我试图使用memcache-client连接创建的amazon elastiCache集群端点。 但我得到了错误

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 `' 

但是正确使用amazon elastiCache集群端点的localhost instread。

 irb(main):006:0> m = MemCache.new('localhost:11211') =>  irb(main):007:0> m.set 'abc', 'xyz' => "STORED\r\n" irb(main):008:0> m.get 'abc' => "xyz" irb(main):009:0> 

好吧,对我来说,问题是安全组。 您只能从具有Elasticache安全组中列出的安全组的ec2实例访问Elasticache节点。

所以对我来说,我的ec2实例有一个“web”安全组。 在弹性缓存中,我随后将“web”添加到“默认”弹性缓冲安全组中。

这里有进一步的解释: http : //docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/CacheSecurityGroup.html

另外,尝试使用这两个gem中的任何一个:

https://github.com/mperham/dalli

https://github.com/ktheory/dalli-elasticache

我正在使用后者,它工作得很好,因为它使用节点的自动发现。

Interesting Posts