使用dalli运行memcached时出现连接错误

时间:2013-07-30 21:33:22

标签: ruby memcached dalli

我无法连接到Dalli在localhost上运行的Memcached服务器。虽然我没有任何在本地运行Memcached的经验,但我一直在使用Dalli和Memcachier Heroku插件一段时间没有任何问题。

我用自制软件下载了memcached,它似乎安装没有问题。我正在运行它:

memcached -l 127.0.0.1 -p 11211 -vv

我可以连接到服务器并使用

进行查询
telnet 127.0.0.1 11211

memcached的详细输出记录了所有请求,所以我知道它运行正常。但是,我无法用Dalli运行它。我想这样连接:

require 'dalli'
dc = Dalli::Client.new('127.0.0.1:11211')
dc.set('foo', 123)

在我运行最后一个命令之后,Dalli一直吐出来

Dalli::RingError: No server available
 from /Users/mac/.rvm/gems/ruby-1.9.3-p392/gems/dalli-2.6.4/lib/dalli/ring.rb:45:in     `server_for_key'
 from /Users/mac/.rvm/gems/ruby-1.9.3-p392/gems/dalli-2.6.4/lib/dalli/client.rb:347:in `perform'
 from /Users/mac/.rvm/gems/ruby-1.9.3-p392/gems/dalli-2.6.4/lib/dalli/client.rb:199:in `set'

...所以我收到此连接错误,但我不知道为什么。这是一个奇怪的部分:Memcached正在接收请求,但它从未成功连接。每当我尝试连接时,以下两行都会通过详细输出吐出:

<6 new client connection
<6 connection closed.

那么这里发生了什么?这是认证吗?我忘记了命令行选项吗?

编辑:弄清楚发生了什么 - 我正在做的一切正常,除了我使用内置版本的Memcached。安装了最新版本,一切都很好。

2 个答案:

答案 0 :(得分:3)

非常简单的问题,实际上:我只使用过时的Memcached版本。不知道为什么会破坏Dalli,但安装新的Memcached会修复它。

答案 1 :(得分:1)

这打破了dalli,因为dalli使用较新的二进制memcached协议而不是旧的纯文本协议。

这样做是为了提高性能,但不幸的是,dalli在早于memcached 1.4的版本中无法使用