Enable memcache php ini

Memcached и PHP ликбез

Memcache разработан для кэширования данных, генерация которых требует большого количества ресурсов. Такого рода данные могут содержать что угодно, начиная с результатов запроса к базе данных и заканчивая тяжеловесным куском шаблона. Memcached не входит в базовый набор модулей, поставляемых с PHP, однако он доступен в репозитории pecl.

Установка и настройка

В качестве рассматриваемого дистрибутива я решил использовать Debian, потому как он наиболее часто используется при создании web-серверов. Модуль Memcached для PHP доступен в репозитории уже скомпилированным (php5-memcached), но я опишу процесс установки из исходного кода, так как не все репозитории настолько богаты, как дебиановский.

Устанавливаем сервер Memcached

#/etc/memcached.conf
#Memcached будет работать, как демон
-d
#Лог будет складывать туда
logfile / var / log / memcached.log
#Отведём 256 мегабайт ОЗУ под хранилище
-m 256
#Слушать будет этот порт
-p 11211
#В последствии желательно поменять
-u nobody
#Слушаем localhost
-l 127.0.0.1

Проверяем

Компилируем и устанавливаем модуль для PHP

apt-get install php5-dev libmemcache-dev

pecl download memcache
tar xzvf memcache-2.2.6.tgz
cd memcache-2.2.6 /
phpize && . / configure —enable-memcache && make
cp modules / memcache.so / usr / lib / php5 / 20060613 /

echo ‘extension=memcache.so’ >> / etc / php5 / apache2 / php.ini
/ etc / init.d / apache2 restart

Примеры использования

1. Базовые операции

  1. //Создаём новый объект. Также можно писать и в процедурном стиле
  2. $memcache_obj = new Memcache ;
  3. //Соединяемся с нашим сервером
  4. $memcache_obj -> connect ( ‘127.0.0.1’ , 11211 ) or die ( «Could not connect» ) ;
  5. //Попытаемся получить объект с ключом our_var
  6. $var_key = @ $memcache_obj -> get ( ‘our_var’ ) ;
  7. if ( ! empty ( $var_key ) )
  8. //Если объект закэширован, выводим его значение
  9. echo $var_key ;
  10. >
  11. else
  12. //Если в кэше нет объекта с ключом our_var, создадим его
  13. //Объект our_var будет храниться 5 секунд и не будет сжат
  14. $memcache_obj -> set ( ‘our_var’ , date ( ‘G:i:s’ ) , false , 5 ) ;
  15. //Выведем закэшированные данные
  16. echo $memcache_obj -> get ( ‘our_var’ ) ;
  17. >
  18. //Закрываем соединение с сервером Memcached
  19. $memcache_obj -> close ( ) ;
  20. ?>

В результате выполнения этого кода каждый раз будет выводиться время с точностью до секунд. Однако обновляться оно будет раз в 5 секунд, пока не очистится кэш. В данном примере проиллюстрированы самые простые операции, но в производительности мы скорее потеряем, чем выиграем. Ведь нам каждый раз придётся подключаться к серверу…

2. Повышаем производительность

2.1 С кэшированием
  1. < ? php
  2. function LoadCPU ( )
  3. //Функция, которая должна зугрузить процессор
  4. //Создадим изображение 800×600
  5. $image = imagecreate ( 800 , 600 ) ;
  6. //Белый фоновый цвет
  7. $color = imagecolorallocate ( $image, 255 , 255 , 255 ) ;
  8. //Чёрный
  9. $color2 = imagecolorallocate ( $image, 0 , 0 , 0 ) ;
  10. for ( $i = 0 ; $i < 10000 ; $i ++ )
  11. //Расставим 10 000 точек в случайном порядке
  12. imagesetpixel ( $image, rand ( 0 , 800 ) , rand ( 0 , 600 ) , $color2 ) ;
  13. >
  14. //Выбрасываем указатель
  15. return $image ;
  16. >
  17. //Создаём новый объект Memcache
  18. $memcache_obj = new Memcache ;
  19. //Соединяемся с нашим сервером
  20. $memcache_obj — > connect ( ‘127.0.0.1’ , 11211 ) or die ( «Could not connect» ) ;
  21. //Попытаемся получить объект с ключом image
  22. $image_bin = @$memcache_obj — > get ( ‘image’ ) ;
  23. if ( empty ( $image_bin ) )
  24. //Если в кэше нет картинки, сгенерируем её и закэшируем
  25. imagepng ( LoadCPU ( ) ,getcwd ( ) . ‘/tmp.png’ , 9 ) ;
  26. $image_bin = file_get_contents ( getcwd ( ) . ‘/tmp.png’ ) ;
  27. unlink ( getcwd ( ) . ‘/tmp.png’ ) ;
  28. $memcache_obj — > set ( ‘image’ , $image_bin, false , 30 ) ;
  29. >
  30. //Выведем картинку из кэша
  31. header ( ‘Content-type: image/png’ ) ;
  32. echo $image_bin ;
  33. //Закрываем соединение с сервером Memcached
  34. $memcache_obj — > close ( ) ;
  35. ? >

В данном примере приведена функция, которая создаёт изображение размером 800×600 и расставляет на нём 10 000 точек. Один раз, сгенерировав такое изображение, в дальнейшем мы лишь выводим его на экран, не генерируя заново.

2.2 Без кэширования
  1. function LoadCPU ( )
  2. //Функция, которая должна загрузить процессор
  3. //Создадим изображение 800×600
  4. $image = imagecreate ( 800 , 600 ) ;
  5. //Белый фоновый цвет
  6. $color = imagecolorallocate ( $image , 255 , 255 , 255 ) ;
  7. //Чёрный
  8. $color2 = imagecolorallocate ( $image , 0 , 0 , 0 ) ;
  9. for ( $i = 0 ; $i < 10000 ; $i ++ )
  10. //Расставим 10 000 точек в случайном порядке
  11. imagesetpixel ( $image , rand ( 0 , 800 ) , rand ( 0 , 600 ) , $color2 ) ;
  12. >
  13. //Выбрасываем указатель
  14. return $image ;
  15. >
  16. //Выводим изображение, не кэшируя
  17. header ( ‘Content-type: image/png’ ) ;
  18. imagepng ( LoadCPU ( ) , » , 9 ) ;
  19. ?>

Тут всё гораздо проще и привычней: генерируем изображение каждый раз заново.

Результаты

memcache

Я протестировал оба скрипта на производительность. Одна и та же машина в первом случае выдала 460 ответов в секунду, а во втором лишь 10. Чего и следовало ожидать.

Ещё несколько полезных функций

addServer — в случае, если у вас в распоряжении несколько кэширующих серверов, вы можете создать некий кластер, добавляя сервера в пул. Следует обратить внимание на параметр weight. Он указывает на то, сколько памяти вам будет доступно на конкретном сервере.
delete — из названия понятно, что данный метод удаляет из кэша объект с заданным ключом.
replace — заменяет значение объекта с заданным ключом. Используйте в случае, если Вам понадобится изменить содержимое объекта, раньше чем истечёт время его жизни.

Итог

С моей точки зрения, применять кэширование стоит только на высоконагруженных ресурсах. Ведь каждый раз, подключаясь к серверу Memcached, вы тратите драгоценное время, что скорее всего не будет оправданным. Что касается больших проектов, лучше сразу написать больше строк кода, чем потом делать это в попыхах, с мыслью о том, что ваш сервис лежит. Также не стоит забывать о расходовании памяти! Учтите, что положив 300 мегабайт в кэш, вы отняли у себя 300 мегабайт ОЗУ.
В завершение хочу сказать, что данная статья не раскрывает все прелести технологии, однако я надеюсь, что она стимулирует Вас к самосовершенствованию. Спасибо за прочтение, многоуважаемый %username%!

UPD: Ещё один интересный момент. Memcached, есть PHP API к libmemcached. А Memcache, библиотека для php, не использующая libmemcached.

Источник

Enable memcache php ini

The behaviour of these functions is affected by settings in php.ini .

Memcache Configuration Options

Name Default Changeable Changelog
memcache.allow_failover «1» PHP_INI_ALL Available since memcache 2.0.2.
memcache.max_failover_attempts «20» PHP_INI_ALL Available since memcache 2.1.0.
memcache.chunk_size «8192» PHP_INI_ALL Available since memcache 2.0.2.
memcache.default_port «11211» PHP_INI_ALL Available since memcache 2.0.2.
memcache.hash_strategy «standard» PHP_INI_ALL Available since memcache 2.2.0.
memcache.hash_function «crc32» PHP_INI_ALL Available since memcache 2.2.0.
memcache.protocol ascii >PHP_INI_ALL Supported since memcache 3.0.0
memcache.redundancy 1 >PHP_INI_ALL Supported since memcache 3.0.0
memcache.session_redundancy 2 >PHP_INI_ALL Supported since memcache 3.0.0
memcache.compress_threshold 20000 >PHP_INI_ALL Supported since memcache 3.0.3
memcache.lock_timeout 15 >PHP_INI_ALL Supported since memcache 3.0.4
Session Configuration Options Affecting Memcache Behavior
Name Default Changeable Changelog
session.save_handler «files» PHP_INI_ALL Supported since memcache 2.1.2
session.save_path «» PHP_INI_ALL Supported since memcache 2.1.2

For further details and definitions of the PHP_INI_* modes, see the Where a configuration setting may be set.

Here’s a short explanation of the configuration directives.

Whether to transparently failover to other servers on errors.

Defines how many servers to try when setting and getting data. Used only in conjunction with memcache.allow_failover.

Data will be transferred in chunks of this size, setting the value lower requires more network writes. Try increasing this value to 32768 if noticing otherwise inexplicable slowdowns.

The default TCP port number to use when connecting to the memcached server if no other port is specified.

Controls which strategy to use when mapping keys to servers. Set this value to consistent to enable consistent hashing which allows servers to be added or removed from the pool without causing keys to be remapped. Setting this value to standard results in the old strategy being used.

Controls which hash function to apply when mapping keys to servers, crc32 uses the standard CRC32 hash while fnv uses FNV-1a.

Use memcache as a session handler by setting this value to memcache .

Defines a comma separated of server urls to use for session storage, for example «tcp://host1:11211, tcp://host2:11211» .

Each url may contain parameters which are applied to that server, they are the same as for the Memcache::addServer() method. For example «tcp://host1:11211?persistent=1&weight=1&timeout=1&retry_interval=15»

Источник

Memcached

Memcached — это высокопроизводительная система кеширования объектов в памяти, предназначенная в первую очередь для ускорения динамических веб-приложений за счет снижения нагрузки на базу данных.

Установка Memcached

Конфигурация размещается в /etc/sysconfig/memcached

Будем использовать только localhost для доступа к Memcached, для этого укажем «OPTIONS=»-l 127.0.0.1″. Размеры выделяемой памяти указывается в мегабайтах и содержится в опции CACHESIZE, рассчитайте необходимый объем кэша и выделите его:

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="512"
OPTIONS="-l 127.0.0.1"

Проверяем, что слушает именно локально:

# netstat -an | grep «:11211»
tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN
udp 0 0 127.0.0.1:11211 0.0.0.0:*

Добавляем Memcached в загрузки при запуске операционной системы:

Просмотр текущего статуса Memcached:

Установка PHP-расширения

Система управления работает как с расширением memcache, так и memcached, рекомендуется использовать memcached.

Установка расширения Memcached (для PHP 5.6 — 7.x)

Установка расширения Memcache (для PHP до версии 5.6), устаревшее

конфигурационный файл будет размещен в /etc/php.d/memcache.ini, примерное содержимое:

; ----- Enable memcache extension module
extension=memcache.so

; ----- Options for the memcache module

; Whether to transparently failover to other servers on errors
;memcache.allow_failover=1
; Data will be transferred in chunks of this size
;memcache.chunk_size=32768
; Autocompress large data
;memcache.compress_threshold=20000
; The default TCP port number to use when connecting to the memcached server
;memcache.default_port=11211
; Hash function
;memcache.hash_function=crc32
; Hash strategy
;memcache.hash_strategy=consistent
; Defines how many servers to try when setting and getting data.
;memcache.max_failover_attempts=20
; The protocol : You need a memcached >= 1.3.0 to use the binary protocol
; The binary protocol results in less traffic and is more efficient
;memcache.protocol=ascii
; Redundancy : When enabled the client sends requests to N servers in parallel
;memcache.redundancy=1
;memcache.session_redundancy=2
; Lock Timeout
;memcache.lock_timeout = 15

; ----- Options to use the memcache session handler

; Use memcache as a session handler
;session.save_handler=memcache
; Defines a comma separated of server urls to use for session storage
;session.save_path="tcp://localhost:11211?persistent=1&weight=1&timeout=1&retry_interval=15"

Источник

Читайте также:  Java editor for linux
Оцените статью