Memcached это программный продукт, предназначенный для хранения данных в виде хеш таблиц. В большинстве случаев он используется для кеширования результатов запросов к БД для различных счетчиков и т.п. Взаимодействие с ним основано на клиент-серверной архитектуре.
Установка его на debian-like дистрибутивы запускается следующей командой:
1 | apt-get install memcached |
Memcached нужно запустить или убедится что он запущен:
1 | sudo systemctl start memcached |
Конфигурация его содержится в файле:
1 | /etc/memcached.conf |
Она содержит номер порта (-p), размер выделяемой памяти (-m), лимит входящих подключений (-с), адрес файла с логом (logfile) и др. После редактирования конфигурации нужно перезапустить memcached:
1 | sudo systemctl restart memcached |
Давайте немного поэкспериментируем.
Для этого создадим виртуальное окружение. Подробнее о них можно прочитать тут.
1 | mkvirtualenv mc_test |
Находясь в виртуальном окружении, установим пакет python-memcached, он представляет собой инструмент для соединиения с memcached:
1 | pip install python-memcached |
Теперь проверим его работоспособность. Для этого создадим файл ex1.py c содержимым:
1 2 3 4 | import memcache connect = memcache.Client(["127.0.0.1:11211"]) connect.set("key", "value") print(connect.get("key")) |
Выполним его из виртуального окружения:
1 | python ex1.py |
В случае, если не было ошибок мы увидим:
1 | value |
Memcached сохранил значения по ключу командой set и выдал нам его командой get. Для соединения использован хост по умолчанию 127.0.0.1 и порт по умолчанию 11211. Как видите, все очень просто.
Сделаем простой счетчик. Создадим файл ex2.py:
1 2 3 4 5 6 7 8 9 | import memcache connect = memcache.Client(["127.0.0.1:11211"]) connect.set("counter", "10") connect.incr("counter") print("Counter: %s" % connect.get("counter")) connect.incr("counter", 7) print("Counter: %s" % connect.get("counter")) connect.decr("counter") print("Counter: %s" % connect.get("counter")) |
Мы создаем переменную counter и присваиваем ей значение 10. Затем, с помощью incr() увеличиваем значение на единицу. После еще раз увеличиваем на 7, и, наконец, уменьшаем на 1.
Создадим простой класс для работы с memcached. Опишем его в файле ex3.py.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import memcache class MemcachedTest(): def __init__(self, hostname="127.0.0.1", port="11211"): self.hostname = "%s:%s" % (hostname, port) self.server = memcache.Client([self.hostname]) def set(self, key, value, expiry=3600): self.server.set(key, value, expiry) def get(self, key): return self.server.get(key) def delete(self, key): self.server.delete(key) |
А теперь воспользуемся им:
1 2 3 4 5 | from ex3 import MemcachedTest connect = MemcachedTest() connect.set("name", "Matt") print(connect.get("name")) connect.delete("name") |
Более подробно с возможностями memcached можно ознакомиться здесь https://code.google.com/p/memcached/ или тут http://memcached.org/.