我需要从本地Python程序访问远程服务器上的Memcached,以便执行设置/获取操作。连接将通过SSH建立,而Memcache本身可通过套接字(/var/run/memcached/memcached.sock)访问。
基本上,我有两种选择:
最方便的一种-使用“ memcache”之类的库,并实现“ set”和“ get”之类的方法。
import memcache
mc = memcache.Client(['127.0.0.1:11211'], debug=0)
mc.set("some_key", "Some value")
value = mc.get("some_key")
这里的问题是客户端的连接字符串。我是否可以使用某种SSH连接字符串或选项,例如
mc = memcache.Client(['123.321.123.321:/var/run/memcached/memcached.sock'], ssh_key="~/.ssh/mykey.pem", debug=0)
找不到“ memcache”以及任何其他库这样的东西。
我设法通过一些不同的服务(不是用Python编写)通过更早的方式设置了一些数据:
import sys, paramiko, getpass
user = "ubuntu"
key_file = "/Users/my_user/.ssh/my_key.pem"
name = "123.321.123.321"
command = "echo 'get my_data_123' | nc -U
/var/run/memcached/memcached.sock"
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname = name, username = user, key_filename =
key_file)
ssh.invoke_shell()
stdin, stdout, stderr = ssh.exec_command (command)
print(stdout.read())
因此,结论是连接和Memcached正常工作。但是,我还没有成功执行正确的“设置”命令。 我尝试过:
echo 'set mykey123 0 50 15 my_data' | nc -U /var/run/memcached/memcached.sock
...以及许多不同的变体,例如:
echo -e 'set mykey321 0 200 20\r\nmy_data\r' | nc -U /var/run/memcached/memcached.sock
它无法设置任何数据,没有响应或某种错误响应,例如
CLIENT_ERROR bad command line format
或者只是简单
ERROR
我是否缺少某些东西(可能,因为有关此文档的信息很少),或者也许由于其他原因无法实现?