无法使用 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
现在我尝试使用 telnet
从 memcached
读取密钥,它工作正常:
$ 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)
dalli
拒绝连接并从远程 memcached
服务器读取,但 telnet
工作正常。
我已经通过 SSH 连接到远程服务器,并将 memcached 端口转发到我的机器,如下所示:
Host access.production
HostName 1.2.3.4
LocalForward 10001 9.8.7.6:11211
现在我尝试使用 telnet
从 memcached
读取密钥,它工作正常:
$ 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)