Используя memcached как устройство хранения данных сессии с CodeIgniter

Я исследую возможности использования memcached, поскольку устройство хранения данных сессии для системы основывалось на CodeIgniter. Кто-либо сделал это прежде (это - вероятно, глупый вопрос :) и раз так кто Ваши люди опыта? Вы использовали какие-либо существующие библиотеки/расширения? До повышения производительности, что Вы видели? Какие-либо протесты?

6
задан Charles 23 December 2012 в 21:49
поделиться

3 ответа

Заставить PHP помещать сессии в Memcache напрямую, а не через код фреймворка, очень просто - достаточно изменить две строки в PHP.ini:

# see http://php.net/manual/en/memcache.ini.php
session.save_handler = memcache
session.save_path="tcp://127.0.0.1:11211?persistent=1&weight=1&timeout=1&retry_interval=15"

Здесь используется немного устаревшее (но все еще полностью поддерживаемое) расширение 'memcache' из PECL.

6
ответ дан 17 December 2019 в 07:02
поделиться

Вы можете выбрать CodeIgniter Multicache Library, которую можно найти здесь: http://www.haughin.com/code/multicache/

В коде вы можете просто использовать вот так:

$this->load->library('cache');
//To use memcache
$this->cache->useMemcache($iptomemcache, $port); /*if you want, you can check to see if the connection even worked, as this will return false if the connection failed.*/
$this->cache->save('testkey', 'testdata', NULL, 3600); /*caches the testdata string for 1 hour. */
echo $this->cache->get('testkey');
//To switch back to file based caching
$this->cache->useFile();
//etc.
1
ответ дан 17 December 2019 в 07:02
поделиться

Непрактично использовать Memcached для хранения реляционных данных (как MySQL); было бы неэффективно запрашивать каждый элемент из Memcached, а затем проверять, соответствует ли он запросу. Существуют лучшие решения для такой проблемы (рассмотрим, например, таблицы памяти в MySQL).

С другой стороны, если вы ищете простое хранилище ключей/значений, это, безусловно, практическое применение для Memcached. Однако я бы немного опасался писать для него драйвер для CodeIgniter. Интерфейс для Memcached в PHP и так очень прост:

$memcached->get('my key');
$memcached->set('my key', 'my value');

Я бы предложил просто использовать классы Memcached напрямую. Добавление всех этих дополнительных накладных расходов в CI кажется мне просто грязным и ненужным.

С другой стороны, я видел реализации Memcached, используемые для сессионного движка CodeIgniter. Это, конечно, очень веская причина для написания драйвера, и я бы настоятельно рекомендовал это сделать (сессии - это боль в шее для масштабирования).

Удачи

-3
ответ дан 17 December 2019 в 07:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: