Spec-Zone .ru
спецификации, руководства, описания, API
|
Python memcache модуль взаимодействует через интерфейс к memcached серверам, и пишется в чистом Python (то есть, не используя
один из API C). Можно загрузить и установить копию с
Чтобы установить, загрузите пакет и затем выполните установщик Python:
python setup.py installrunning installrunning bdist_eggrunning egg_infocreating python_memcached.egg-info...removing 'build/bdist.linux-x86_64/egg' (and everything under it)Processing python_memcached-1.43-py2.4.eggcreating /usr/lib64/python2.4/site-packages/python_memcached-1.43-py2.4.eggExtracting python_memcached-1.43-py2.4.egg to /usr/lib64/python2.4/site-packagesAdding python-memcached 1.43 to easy-install.pth fileInstalled /usr/lib64/python2.4/site-packages/python_memcached-1.43-py2.4.eggProcessing dependencies for python-memcached==1.43Finished processing dependencies for python-memcached==1.43
После того, как установленный, memcache
модуль обеспечивает class на основе
интерфейс для Ваших memcached серверов. То, когда Вы храните
структуры данных Python как memcached элементы, они автоматически
сериализируются (превратилось в строковые значения), использование Python cPickle
или pickle
модули.
Создать новое memcache
интерфейс, импортируйте memcache
модуль и создает новый экземпляр memcache.Client
class. Например, если memcached демон работает на localhost использование порта значения
по умолчанию:
import memcachememc = memcache.Client(['127.0.0.1:11211'])
Первым параметром является массив строк, содержащих сервер и номер порта для каждого memcached экземпляра, чтобы использовать. Чтобы позволить отладить,
установите дополнительное debug
параметр к 1.
По умолчанию хеширующий механизм, используемый, чтобы разделить элементы среди многократных серверов, crc32
. Чтобы изменить используемую функцию, установите значение memcache.serverHashFunction
к альтернативной функции, чтобы использовать. Например:
from zlib import adler32memcache.serverHashFunction = adler32
Как только Вы определили серверы, чтобы использовать в пределах memcache
экземпляр,
базовые функции обеспечивают ту же самую функциональность как в универсальной спецификации интерфейса. Следующая
таблица обеспечивает сводку поддерживаемых функций:
Python memcache Функция |
Эквивалентная Родовая функция |
---|---|
get() |
Универсальный get() . |
get_multi(keys) |
Получает многократные значения от предоставленного массива keys .
Возвращает ссылку хеша пар ключ/значение.
|
set() |
Универсальный set() . |
set_multi(dict [, expiry [, key_prefix]]) |
Наборы многократные пары ключ/значение от предоставленного dict . |
add() |
Универсальный add() . |
replace() |
Универсальный replace() . |
prepend(key, value [, expiry]) |
Предварительно ожидает предоставленный value к значению существующего
key .
|
append(key, value [, expiry[) |
Добавляет предоставленный value к значению существующего key .
|
delete() |
Универсальный delete() . |
delete_multi(keys [, expiry [, key_prefix]] ) |
Удаляет все ключи из хеша, соответствующего каждую строку в массивеkeys .
|
incr() |
Универсальный incr() . |
decr() |
Универсальный decr() . |
В пределах Python memcache
модуль, весь *_multi()
функции
поддерживают дополнительное key_prefix
параметр. Если предоставлено, то строка
используется в качестве префикса ко всем ключевым поискам. Например, если Вы вызываете:
memc.get_multi(['a','b'], key_prefix='users:')
Функция получает ключи users:a
и users:b
от серверов.
Вот пример, показывая хранение и извлечение информации к a memcache
экземпляр,
загружая необработанные данные из MySQL:
import sysimport MySQLdbimport memcachememc = memcache.Client(['127.0.0.1:11211'], debug=1);try: conn = MySQLdb.connect (host = "localhost", user = "sakila", passwd = "password", db = "sakila")except MySQLdb.Error, e: print "Error %d: %s" % (e.args[0], e.args[1]) sys.exit (1)popularfilms = memc.get('top5films')if not popularfilms: cursor = conn.cursor() cursor.execute('select film_id,title from film order by rental_rate desc limit 5') rows = cursor.fetchall() memc.set('top5films',rows,60) print "Updated memcached with MySQL data"else: print "Loaded data from memcached" for row in popularfilms: print "%s, %s" % (row[0], row[1])
Когда выполняющийся впервые, данные загружаются из базы данных MySQL и хранятся к memcached серверу.
shell> python memc_python.pyUpdated memcached with MySQL data
Поскольку данные автоматически сериализируются, используя cPickle
/pickle
, когда Вы загружаете данные назад из memcached, можно использовать объект непосредственно. В примере
выше, информация, хранившая к memcached
находится в форме строк от курсора DB
Python. Получая доступ к информации (в пределах 60 вторых раз истечения), данные загружаются из memcached
и выведенный:
shell> python memc_python.pyLoaded data from memcached2, ACE GOLDFINGER7, AIRPLANE SIERRA8, AIRPORT POLLOCK10, ALADDIN CALENDAR13, ALI FOREVER
Сериализация и десериализация происходят автоматически. Поскольку сериализация данных Python может быть несовместимой с другими интерфейсами и языками, можно изменить модуль сериализации, используемый во время инициализации. Например, Вы могли бы использовать формат ДЖСОНА, когда Вы храните сложные структуры данных, используя сценарий, записанный на одном языке, и получаете доступ к ним в сценарии, записанном на различном языке.