无法使用 dalli 从 memcached 读取密钥

Can't read key from memcached using dalli

dalli 拒绝连接并从远程 memcached 服务器读取,但 telnet 工作正常。

我已经通过 SSH 连接到远程服务器,并将 memcached 端口转发到我的机器,如下所示:

Host access.production
  HostName 1.2.3.4
  LocalForward 10001 9.8.7.6:11211

现在我尝试使用 telnetmemcached 读取密钥,它工作正常:

$ telnet localhost 10001
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

但是,以下 Ruby 使用 dalli 的脚本将失败:

require 'dalli'

client = Dalli::Client.new('localhost:10001')
client.get('my_key')

为什么 dalli 不会连接到 memcached,而 telnet – 会?

已更新dalli returns 这个错误:

I, [2015-07-17T11:22:36.839807 #4286]  INFO -- : localhost:10001 failed (count: 0) Timeout::Error: IO timeout: {:host=>"localhost", :port=>10001, :down_retry_delay=>1, :socket_timeout=>0.5, :socket_max_failures=>2, :socket_failure_delay=>0.01, :value_max_bytes=>1048576, :compressor=>Dalli::Compressor, :compression_min_size=>1024, :compression_max_size=>false, :serializer=>Marshal, :username=>nil, :password=>nil, :keepalive=>true}
/Users/gmile/.rvm/gems/ruby-2.1.4@portal/gems/dalli-2.7.2/lib/dalli/ring.rb:45:in `server_for_key': No server available (Dalli::RingError)
    from /Users/gmile/.rvm/gems/ruby-2.1.4@portal/gems/dalli-2.7.2/lib/dalli/client.rb:328:in `perform'
    from /Users/gmile/.rvm/gems/ruby-2.1.4@portal/gems/dalli-2.7.2/lib/dalli/client.rb:53:in `get'
    from dali_all_keys.rb:4:in `<main>'

Dalli 默认超时为 500 毫秒。鉴于内存缓存响应时间通常为个位数毫秒,并且您将内存缓存实例放置在靠近服务器的位置,这通常足够了。

另一方面,鉴于您是通过 ssh 隧道连接的,您可能会看到更大的延迟,您可能需要增加超时:

 Dalli::Client.new("127.0.0.1:10001", socket_timeout: 2.0)