
Cuprins
- Introducere
- Pe ce mediu am instalat?
- Software necesar
- Instalarea Serviciului Memcache
- Instalarea extensiei PHP Memcache
- Pornirea și oprirea serviciului cu MAMP
Memcache este un serviciu care îți permite să stochezi în memorie date arbitrare (șiruri, obiecte) sub formă cheie-valoare (key-value). Datele stocate sunt de regulă rezultate ale interogărilor bazelor de date, interogări API sau cache al paginilor web. De regulă Memcache se utilizează ca și backend pentru date volatile (cache) dat fiind faptul că servește informația din memorie și nu accesează hard-disk-ul.
Am fost nevoit să-mi instalez Memcache pe MacBook Pro deoarece acolo dezvolt o aplicație web Drupal care stochează cache-ul în memorie. Acest articol te va ghida în instalarea Memcache pe Mac OS X permițându-ți testarea aplicațiilor locale. Pe MacBook Pro aplicațiile web rulează MAMP pentru a asigura un mediu de dezvoltare Apache, MySQL, PHP.
Am instalat Memcache pe MacBook Pro având ca și sistem de operare Mac OS X 10.6.8. Pa acestă platformă folosesc MAMP 2.0.2 având: Apache 2.2.17, MySQL 5.5.9 și PHP 5.3.6. MAMP este abrevierea de la: Macintosh, Apache, MySQL și PHP. MAMP instalează în câteva secunde, pe Mac OS X, un mediu server complet.
Premergător instalării Memcache trebuie instalate următoarele instrumente:
- MacPorts 2.0.3.
- MacPorts este o inițiativă open-source destinată construirii unui sistem facil pentru compilare, instalare sau actualizare din linia de comandă pentru sistemul Mac OS X bazat pe pachete. Este similar APT sau YUM.
- Apple Xcode Developer Tools
- Xcode este o suită de instrumente (tools) create de Apple pentru dezvoltarea Mac OS X și iOS.
Dacă nu sunt instalate deja, consultă documentație aferentă fiecărui produs și instalează-le înainte de a trece la instalarea Memcache.
Instalarea Serviciului Memcache
Pentru instalare folosim pur și simplu MacPorts:
$ sudo port selfupdate $ sudo port upgrade outdated $ sudo port install memcached
Testează dacă serviciul a fost instalat cu succes:
$ memcached -h
Va trebui să returneze aproximativ următorul răspuns:
memcached 1.4.5
-p <num> TCP port number to listen on (default: 11211)
-U <num> UDP port number to listen on (default: 11211, 0 is off)
-s <file> UNIX socket path to listen on (disables network support)
-a <mask> access mask for UNIX socket, in octal (default: 0700)
-l <ip_addr> interface to listen on (default: INADDR_ANY, all addresses)
-d run as a daemon
-r maximize core file limit
-u <username> assume identity of <username> (only when run as root)
-m <num> max memory to use for items in megabytes (default: 64 MB)
-M return error on memory exhausted (rather than removing items)
-c <num> max simultaneous connections (default: 1024)
-k lock down all paged memory. Note that there is a
limit on how much memory you may lock. Trying to
allocate more than that would fail, so be sure you
set the limit correctly for the user you started
the daemon with (not for -u <username> user;
under sh this is done with 'ulimit -S -l NUM_KB').
-v verbose (print errors/warnings while in event loop)
-vv very verbose (also print client commands/reponses)
-vvv extremely verbose (also print internal state transitions)
-h print this help and exit
-i print memcached and libevent license
-P <file> save PID in <file>, only used with -d option
-f <factor> chunk size growth factor (default: 1.25)
-n <bytes> minimum space allocated for key+value+flags (default: 48)
-L Try to use large memory pages (if available). Increasing
the memory page size could reduce the number of TLB misses
and improve the performance. In order to get large pages
from the OS, memcached will allocate the total item-cache
in one large chunk.
-D <char> Use <char> as the delimiter between key prefixes and IDs.
This is used for per-prefix stats reporting. The default is
":" (colon). If this option is specified, stats collection
is turned on automatically; if not, then it may be turned on
by sending the "stats detail on" command to the server.
-t <num> number of threads to use (default: 4)
-R Maximum number of requests per event, limits the number of
requests process for a given connection to prevent
starvation (default: 20)
-C Disable use of CAS
-b Set the backlog queue limit (default: 1024)
-B Binding protocol - one of ascii, binary, or auto (default)
-I Override the size of each slab page. Adjusts max item size
(default: 1mb, min: 1k, max: 128m)Instalarea extensiei PHP Memcache
Putem descărca extensia binară Memcache dar e preferabilă compilarea extensiei PECL Memcache. Voi descrie aici metoda compilării pentru că ne ferește de folosirea unei extensii incompatibile.
Iată ce pași trebuie urmați:
Descarcă sursele extensiei Memcache. Cea mai simplă cale este:
$ cd $ sudo pecl download memcache
Dacă comanda eșuează cu această eroare (eu am pățit-o):
Notice: unserialize(): Error at offset 276 of 1133 bytes in Config.php on line 1050 ERROR: The default config file is not a valid config file or is corrupted.
...încearcă să ștergi acest fișier:
$ sudo rm /Applications/MAMP/bin/php/php5.3.6/conf/pear.conf
Extrage sursele și intră în director:
$ tar xvfz memcache-2.2.6.tgz $ cd memcache-2.2.6
MAMP nu conține fișierele header-ului PHP C așa că e nevoie să le legi (symlink) din directorul Apple Developer SDK. Vei observa că există directoarele:
/Developer/SDKs/MacOSX10.5.sdk/Developer/SDKs/MacOSX10.6.sdk
Dacă ai PHP 5.2 trebuie să folosești 10.5. Pentru PHP 5.3 folosește 10.6 SDK.
$ sudo ln -s /Developer/SDKs/MacOSX10.6.sdk/usr/include/ /Applications/MAMP/bin/php/php5.3.6/include
Din directorul memcache-2.2.6 rulează phpize pentru a crea fișierul de configurare:
$ cd ~/ memcache-2.2.6 $ sudo /Applications/MAMP/bin/php/php5.3.6/bin/phpize
Acum rulează „configure” folosind următoarea comandă:
MACOSX_DEPLOYMENT_TARGET=10.6 CFLAGS='-O3 -fno-common -arch i386 -arch x86_64' LDFLAGS='-O3 -arch i386 -arch x86_64' CXXFLAGS='-O3 -fno-common -arch i386 -arch x86_64' ./configure –with-php-config=/Applications/MAMP/bin/php/php5.3.6/bin/php-config
Comanda de mai sus compilează atât versiunea i386 (32 bit) cât și versiunea x86_64 (64 bit) și utilizează PHP config aparținând MAMP pentru a realiza asta.
După compilare construim biblioteca:
$ sudo make
La final copiem extensia în directorul de extensii PHP al MAMP:
$ sudo cp modules/memcache.so /Applications/MAMP/bin/php/php5.3.6/lib/php/extensions/no-debug-non-zts-20090626/
Activează extensia Memcache prin editarea fișierului de configurare PHP:
$ sudo nano /Applications/MAMP/bin/php/php5.3.6/conf/php.ini
și adaugă extensia...
extension=memcache.so
Pornirea și oprirea serviciului cu MAMP
Acum Memcache este instalat și disponibil pentru MAMP. Ideal ar fi să configuram Memcache să pornească și să se oprească în același timp cu Apache odată cu folosirea butoanelor MAMP. Pentru aceasta trebuie să modificăm și să adăugăm niște scripturi de pe care MAMP le va folosi pentru pornirea sau oprirea Apache.

În exemplul nostru o dată cu pornirea sau oprirea serverelor MAMP vor porni sau se vor opri automat și 5 instanțe Memcache a câte 24 MB, aferent porturilor: 11211, 11212, 11213, 11214 și 11215.
Scripturile de pornire/oprire se află în /Applications/MAMP/bin:
$ cd /Applications/MAMP/bin
Creează următoarele 2 scripturi noi:
$ sudo nano startMemcached.sh # /bin/sh instances=5 for ((n=1; n<=$instances; n++)) do ((port=(11210+$n))) /usr/local/bin/memcached -d -u nobody -m 24 -p $port done
și
$ sudo nano stopMemcached.sh killall memcached
Nu uita: noile scripturi trebuie să fie executabile:
$ sudo chmod +x startMemcached.sh stopMemcached.sh
De asemene modifică scripturile de pornire/oprire Apache astfel încât să aibă următorul conținut:
$ sudo nano startApache.sh # /bin/sh /Applications/MAMP/Library/bin/apachectl start /Applications/MAMP/bin/startMemcached.sh
și
$ sudo nano stopApache.sh # /bin/sh /Applications/MAMP/Library/bin/apachectl stop /Applications/MAMP/bin/stopMemcached.sh
Voila! Memcache este instalat și configurat pe Mac OS X și va porni sau se va opri împreună cu Apache, de la butoanele de control MAMP.
Succes! :)












Comentarii
xcode-ul parca vine direct cu memecached-ul.
daca nu-i instalat xcode, unde ar fi nevoie de xcoe in procedura descrisa cu macports?
p.s. graba mare, am gresit. memcached diferit de extensia memcache pt php
Xcode este o suită de tools pentru programatori care poate fi descărcată de la Apple. Are cam 3GB :) Nu avem nevoie de Xcode pentru instalarea serviciului memcached. Acesta se instalează așa cum am spus folosind MacPorts.
În schimb dacă dorim să compilăm extensia PHP pentru Memcache (memcache.so) avem nevoie de Xcode pentru că ne instalează în sistem GNU Compiler Collection (gcc). Nu prea există alternativă.
În schimb există posibilitatea folosirii unui extensii binare gata compilate (memcache.so), aici toată problema este de compatibilitate. Mai simplu ar fi să instalezi extensia folosind utilitarul
peclDupă asta trebuie identificat unde s-a instalat memcache.so și trebuie făcut un symlink de genul
/Applications/MAMP/bin/php/php5.3.6/lib/php/extensions/no-debug-non-zts-20090626/memcache.so. Nu am testat această variantă.Publică un comentariu nou