Мне нужен доступ к Memcached на удаленном сервере из локальной программы Python, чтобы я мог выполнять операции set / get.Соединение должно быть сделано через 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", как и для любой другой библиотеки.
Используйте netcat.
Мне удалось получить некоторые данные, заданные ранее другой службой (не написанные на 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 работают,Тем не менее, мне еще не удалось сделать правильную команду «set».Я попытался:
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
Я что-то упустил (возможно, так как документации по этому вопросу немного), или, возможно, это невозможно по какой-то другой причине?