Кэштеу және жад-кэштелген. php phpMemcachedAdmin жүйесінде memcached пайдалану - Memcached мониторингі, статистикасы және басқару

Интернетте бұл тақырып бойынша көптеген ақпарат бар, бірақ соған қарамастан, көпшілігі одан бас тартады. Бұл жазбаның мақсаты - Memcached-пен өзара әрекеттесу негіздерін бір қарағанда түсіндіру.

Memcache дегеніміз не және оның РНР-ге қандай қатысы бар?

Memcache генерациялау үшін көп ресурстарды қажет ететін деректерді кэштеуге арналған. Бұл деректер түрі дерекқор сұрауының нәтижелерінен үлгінің ауыр бөлігіне дейін кез келген нәрсені қамтуы мүмкін. Memcached PHP-мен бірге келетін модульдердің негізгі жинағына кірмейді, бірақ ол pecl репозиторийінде қол жетімді.

Орнату және конфигурациялау

Мен Debian-ды қарастырылып жатқан дистрибутив ретінде пайдалануды шештім, себебі ол көбінесе веб-серверлерді құру кезінде қолданылады. PHP үшін Memcached модулі бұрыннан құрастырылған репозиторийде қолжетімді (php5-memcached), бірақ мен бастапқы кодтан орнату процесін сипаттаймын, өйткені барлық репозиторийлер Debian сияқты бай емес.

Memcached серверін орнату

#apt-get орнату жад кэштелген
Бастау үшін келесі конфигурация сізге жеткілікті болады:
#/etc/memcached.conf
#Memcached жын сияқты жұмыс істейді
-d
#Журнал сонда қосылады
журнал файлы /var/log/
#Сақтауға 256 мегабайт жедел жад бөлеміз
-м 256
#Бұл порт тыңдайды
-11211 б
#Болашақта өзгерген жөн
-сен ешкім
#Жергілікті хостты тыңдаңыз
-l 127.0.0.1

#/etc/init.d/memcached қайта іске қосу
Тексеруде
# netstat -түртіңіз | grep мемкэштелген
tcp 0 0 localhost:11211 * :* ТЫҢДАУ 13036 /

PHP модулін құрастырыңыз және орнатыңыз

apt-get орнату php5-dev libmemcache-dev

Memcache жүктеп алыңыз
tar xzvf memcache-2.2.6.tgz
CD memcache-2.2.6/
phpize && ./ конфигурациялау --enable-memcache && жасау
cp модульдері/ / usr/ lib/ php5/ 20060613 /

echo "extension=memcache.so" >> / etc/ php5/ apache2/ php.ini
/etc/init.d/apache2 қайта іске қосыңыз


Міне бітті! Бұл мүлдем қиын емес.

Қолдану мысалдары

1. Негізгі операциялар

  1. //Жаңа объект құру. Процедуралық стильде де жазуға болады
  2. = жаңа;
  3. -> қосылыңыз («127.0.0.1» , 11211 ) немесе өліңіз («Қосылу мүмкін болмады» );
  4. //our_var кілті бар нысанды алуға тырысыңыз
  5. $var_key = @ -> алу («біздің_вар»);
  6. егер (! бос ($var_key) )
  7. //Егер нысан кэштелген болса, оның мәнін басып шығарыңыз
  8. echo $var_key ;
  9. басқа
  10. //Кэште our_var кілті бар нысан жоқ болса, оны жасаңыз
  11. //Біздің_var нысаны 5 секунд сақталады және қысылмайды
  12. -> орнату («біздің_вар» , күні («G:i:s» ), жалған , 5 );
  13. //Кэштелген деректерді шығару
  14. echo -> алу («біздің_вар»);
  15. ->жабу();

Бұл кодты орындау нәтижесінде уақыт әр уақытта секундтарға дейін дәл көрсетіледі. Дегенмен, кэш тазартылғанша ол 5 секунд сайын жаңартылып отырады. Бұл мысал ең қарапайым операцияларды суреттейді, бірақ біз табысқа қарағанда өнімділікте жоғалтуымыз ықтимал. Өйткені, серверге әр жолы қосылуға тура келеді...

2. Еңбек өнімділігін арттыру

2.1 Кэштеумен
  1. < ? php
  2. LoadCPU() функциясы
  3. //Процессорды жүктейтін функция
  4. $сурет = кескін жасау(800, 600);
  5. //Ақ фон түсі
  6. $color = imagecolorallocate($image, 255 , 255 , 255 );
  7. //Қара
  8. $color2 = imagecolorallocate($image, 0 , 0 , 0 );
  9. үшін ($i = 0; $i< 10000 ; $i++ ) {
  10. imagesetpixel($image, rand (0 , 800 ) , rand (0 ,600 ) , $color2) ;
  11. //Меңзерді тастаңыз
  12. $image қайтару;
  13. //Жаңа Memcache нысанын жасаңыз
  14. = жаңа;
  15. //Серверімізге қосылыңыз
  16. -> connect("127.0.0.1" , 11211 ) немесе die("қосылу мүмкін болмады" );
  17. //Негізгі кескіні бар нысанды алуға тырысыңыз
  18. $image_bin = - > get("сурет" );
  19. егер (бос($image_bin) ) (
  20. //Кэште сурет жоқ болса, оны жасаңыз және кэштеңіз
  21. imagepng(LoadCPU() ,getcwd() ."/tmp.png" ,9 );
  22. $image_bin = file_get_contents(getcwd() ."/tmp.png" );
  23. ажырату(getcwd() ."/tmp.png" );
  24. -> set("image" , $image_bin, false , 30 );
  25. //Кэштен суретті шығарып алу
  26. тақырып («Мазмұн түрі: сурет/png» );
  27. echo $image_bin;
  28. //Memcached серверіне қосылымды жабыңыз
  29. -> жабу();
  30. ? >

Бұл мысал 800x600 кескінді жасайтын және оған 10 000 нүкте қоятын функцияны көрсетеді. Мұндай кескінді бір рет жасағаннан кейін, болашақта біз оны қайтадан жасамай-ақ экранда ғана көрсетеміз.
2.2 Кэштеу жоқ
  1. LoadCPU() функциясы
  2. //Процессорды жүктейтін функция
  3. //800x600 суретті жасаңыз
  4. $сурет = кескін жасау(800, 600);
  5. //Ақ фон түсі
  6. $color = imagecolorallocate($image, 255, 255, 255);
  7. //Қара
  8. $color2 = imagecolorallocate($image, 0, 0, 0);
  9. үшін ($i = 0; $i< 10000 ; $i ++ ) {
  10. //10 000 нүктені кездейсоқ ретпен орналастырыңыз
  11. imagesetpixel($image, rand(0,800), rand(0,600), $color2);
  12. //Меңзерді тастаңыз
  13. $image қайтару;
  14. //Кэштеусіз кескінді көрсету
  15. тақырып («Мазмұн түрі: сурет/png»);
  16. imagepng (LoadCPU(), "", 9);

Мұнда бәрі әлдеқайда қарапайым және таныс: біз кескінді әр уақытта жаңадан жасаймыз.
Нәтижелер
Мен екі сценарийді өнімділік үшін сынадым. Дәл сол машина бірінші жағдайда секундына 460 жауап берді, ал екіншісінде тек 10. Нені күтуге болатын еді.

Тағы бірнеше пайдалы мүмкіндіктер

addServer - егер сізде бірнеше кэштеу серверлері болса, бассейнге серверлерді қосу арқылы кластер жасай аласыз. Параметрге назар аудару керек салмақ. Ол белгілі бір серверде қанша жад қол жетімді болатынын көрсетеді.
жою - атаудан бұл әдіс кэштен берілген кілті бар нысанды өшіретіні анық.
ауыстыру – берілген кілтпен объект мәнін ауыстырады. Оны пайдалану мерзімі біткенге дейін нысанның мазмұнын өзгерту қажет болса, пайдаланыңыз.

Төменгі сызық

Менің көзқарасым бойынша, кэштеу тек жоғары жүктелген ресурстарда қолданылуы керек. Ақыр соңында, Memcached серверіне қосылған сайын сіз қымбат уақытты босқа өткізесіз, бұл, ең алдымен, ақталмайды. Ірі жобаларға келсек, сіздің қызметіңіз өтірік деп ойлап, асығыс жасағанша, бірден көбірек код жолын жазған дұрыс. Сондай-ақ, жадты тұтыну туралы ұмытпаңыз! Кэшке 300 мегабайт қою арқылы сіз 300 мегабайт жедел жадты алып тастағаныңызды ескеріңіз...
Қорытындылай келе, бұл мақалада технологияның барлық ләззаттарын ашпағанын айтқым келеді, бірақ бұл сізді өзін-өзі жетілдіруге ынталандырады деп үміттенемін. Оқығаныңыз үшін рахмет, құрметті %username%!

UPD:Тағы бір қызықты нүкте. Memcached, libmemcached үшін PHP API бар. Және Memcache, libmemcached қолданбайтын PHP кітапханасы.

Memcache модулі мемкэштелген кэштеу механизміне ыңғайлы процедуралық және объектіге бағытталған интерфейстерді қамтамасыз етеді. Memcache - бұл жоғары жүктеме, динамикалық веб-қосымшалар үшін дерекқор жүктемесін азайту үшін арнайы әзірленген өте тиімді кэштеу демоны.

Memcache модулі сеанс өңдеушісін де қамтамасыз етеді. Memcached туралы қосымша ақпаратты memcached.org сайтынан табуға болады

Негізінде, орнату және конфигурациялаудың орыс тілінде сипаттамасы қазірдің өзінде дайын және сіз онымен таныса аласыз.

Кэште деректердің кез келген түрін сақтауға болатынын есте сақтаңыз: айнымалылар, нысандар және массивтер, БІРАҚ РЕСУРСТАР ЕМЕС!

Егер кез келген нысанда ресурс сипаты болса, мысалы, дерекқорға қосылым немесе ұқсас қасиеттері бар басқа нысан болса, онда бұл жағдайды бөлек өңдеу керек, мысалы, осы ресурс қажет болатын __sleep() әдісін қайта анықтау арқылы. «өлтіру» және осы ресурсты қайта жандандыру қажет __ояту әдісі ().

Іс жүзінде бұл әдістердің барлығын 3 топқа бөлуге болады:

  1. Құндылықтармен жұмыс
  2. Серверлермен және қосылымдармен жұмыс істеу
  3. Ақпарат алу

Құндылықтармен жұмыс

Бұл топтағы әдістер келесі әрекеттерді орындауға мүмкіндік береді:

  • Мәндерді орнату
  • Бұл мәндерді жойыңыз
  • Осы мәндерді ауыстырыңыз
  • Бұл мәндерге кілт арқылы қол жеткізіңіз
  • Құнды өмір сүру уақытын басқарыңыз

Бүтін мәндерді арттыру және азайту үшін бірнеше арнайы әдістер.

Memcache::set()
Memcache::add()

Бұл мән үшін мәнді орнатуға, қысуды және қызмет ету мерзімін орнатуға мүмкіндік береді. Бұл әдістердің әрекетіндегі жалғыз айырмашылық, егер бірдей кілті бар мән орнатылған болса, Memcache::add әдісі FALSE қайтарады.

бол Memcache::қосу
бол Memcache::set(жол $key , аралас $var [, int $flag [, int $expire ]])

  • string $key - бұл мәннің кілті, оны пайдалану арқылы біз мәнмен жұмыс істейміз.
  • аралас $var - мән.
  • тұрақтылар
connect("localhost", 11211, 30);

$cache->add("менің бірінші", 1000, MEMCACHE_COMPRESSED, 15);

$cache->set("менің секунд", 2000, MEMCACHE_COMPRESSED, 15);

Memcache::get()

Сұралған мәнді немесе сәтсіздікте ЖАЛҒАН мәнін қайтарады немесе сол кілті бар мән әлі орнатылмаған болса.

Мән кілттерінің массивін беруге болады, содан кейін Memcache::get сонымен қатар массивді қайтарады, онда табылған кілт-мән жұптары болады. Ескертулер!

Егер кілт атауында кері қиғаш сызық болса, онда жұмыстың нәтижесі күтпеген болады! Memcached-де кейбір мәселелер бар: кейбір есептерге сәйкес, ол (кейде)

буфердің толып кету қателеріне бейім , бұл кейде [ішінара] деректерді қайта жазуға әкеліп соқтырады және сондықтан құрылымдарды сериядан шығару мүмкін болмайтын болса, Memcache::get массив немесе нысанды шығарып алу нәтижесінде bool, dobule немесе long қайтаратынын тексеріңіз, содан кейін бірдеңе дұрыс болмады.жол
Memcache::get , бұл кейде [ішінара] деректерді қайта жазуға әкеліп соқтырады және сондықтан құрылымдарды сериядан шығару мүмкін болмайтын болса, Memcache::get массив немесе нысанды шығарып алу нәтижесінде bool, dobule немесе long қайтаратынын тексеріңіз, содан кейін бірдеңе дұрыс болмады.(жол $key [, int &$flags ])

  • массив
  • (массив $кілттері [, массив және $жалаушалары ])
string $key - мән кілті немесе мәндерін алу қажет кілттер жиымы.

int $flag - бұл параметрдің мақсаты мен үшін жұмбақ болып қала береді. Мен кейбір бүтін мәндерді қолдануға тырыстым, бірақ ол ешқандай әсер етпеді. Мысалдар көбінесе оны қолданбай беріледі, мен қорытынды жасадым: онсыз да жақсы жұмыс істей аласыз :)

connect("localhost", 11211, 30);

$cache->add("менің бірінші", 1000, MEMCACHE_COMPRESSED, 15);

$cache->set("менің секунд", 2000, MEMCACHE_COMPRESSED, 15);

print_r($cache->get(array("менің бірінші","меніңсекунд"))));

Бұл әдіс әрқашан жұмыс істемейді (бағдарламалық құрал нұсқасына байланысты)! Беттің соңында Memcache::delete жұмыс істейтін және жұмыс істемейтін жағдайлар бар.

Жалғыз тұрақты опция - қажет емес мәндерді қалпына келтіру:

$cache->set("үш", NULL);

Бір ғана минус бар - бұл жағдайда кілт ешқайда кетпейді

буфердің толып кету қателеріне бейім Memcache :: жою(жол $key [, int $timeout = 0 ])

  • $key жолы - жойылатын кілт мәні.
  • int $timeout - Бұл параметр де ескірген және оған қолдау көрсетілмейді, әдепкі бойынша 0 секунд. Бұл опцияны қолданбаңыз.

Memcache::replace()

Бар мәнді қайта жазу.

Ауыстыру үшін Memcache::replace() қолданылуы керек бар мән. Егер мұндай кілті бар мән жоқ болса, Memcache::replace() FALSE мәнін қайтарады. Әйтпесе, Memcache::replace() функциясы Memcache::set() сияқты әрекет етеді. Сондай-ақ memcache_replace() функциясын пайдалануға болады

буфердің толып кету қателеріне бейім Memcache :: ауыстыру(жол $key , аралас $var [, int $flag [, int $expire ]])

  • string $key - мәнін ауыстыру қажет кілт.
  • аралас $var - жаңа мән.
  • int $flag - Сақталған мән үшін қысуды қолдану керектігін көрсететін жалауша (бұл жерде Zlib кіреді), тұрақты мәндерді пайдалануға болады
  • int $expire - Мәннің қызмет ету мерзімі (кэш). Егер нөлге тең болса, онда шексіз. Сондай-ақ, ағымдағы уақыттан бері уақыт белгісін немесе секунд санын пайдалануға болады, бірақ секундтар саны 2592000 (30 күн) аспауы керек.
connect("localhost", 11211, 30);

$cache->add("бір", 111, 0, 15);

$cache->add("екі", 222, 0, 15);

$cache->add("үш", 333, 0, 15);

$cache->replace("үш", 777);

print_r($cache->get(array("бір","екі","үш")))); Массив ( => 111 => 222 => 777)

  • Memcache::increment()
  • Көрсетілген кілттің мәнін көрсетілген мәнге арттырады. Көрсетілген кілттің мәні сандық емес және оны санға түрлендіру мүмкін болмаса, онда ол өзінің мәнін екінші параметр ретінде көрсетілген мәнге өзгертеді. Memcache::increment() элементі бұрыннан жоқ болса, оны жасамайды.
connect("localhost", 11211, 30);

$cache->set("someOne", 10, 0, 5);

$cache->increment("someOne", 10, 0, 5);

print_r($cache->get(array("бір","екі","үш")))); $cache->increment("someOne", 10, 0, 5); echo $cache->get("someOne");// 30 басып шығарады

  • Memcache::decrement()
  • Көрсетілген кілттің мәнін көрсетілген мән бойынша азайтады. Memcache::increment() сияқты элементтің ағымдағы мәні сандық мәнге түрлендіріліп, одан кейін азайтылады.

Memcache::азайту

(жол $key [, int $мән = 1 ])

бол string $key - мәнін азайту керек кілт. int $value - мәнді азайту.

Memcache::flush()

Memcache::flush() барлық бар мәндерді жарамсыз етеді. Memcache::flush() шын мәнінде жад ресурстарын босатпайды, ол тек барлық элементтерді ескірген деп белгілейді, осылайша бос тұрған жад жаңа мәндермен пайдалану үшін қолжетімді болады. Сондай-ақ memcache_flush() функциясын пайдалануға болады

Memcache :: flush

(жарамсыз)

Төмендегі мысал ештеңе шығармайды. connect("localhost", 11211, 30);

$cache->set("someOne", 111, 0, 5); $cache->set("someTwo", 222, 0, 5);$cache->set("someTree", 333, 0, 5);

$cache->flush(); //Кэшті тазартады print_r($cache->get(array("someOne","someTwo","someTree"))));

Серверлермен және қосылымдармен жұмыс істеу.

бол connect("localhost", 11211, 30);

Memcache бір сервермен немесе серверлер пулымен (жиынымен) жұмыс істей алады.

Кэшке қызмет көрсету үшін тек бір серверді пайдалансаңыз, жұмысты инициализациялау үшін тек кэш нысанын жасап, әдісті пайдалану қажет.

Memcache::connect

Егер сіз серверлер пулын жасағыңыз келсе, алдымен кэш нысанын жасауыңыз керек, содан кейін Memcache::addServerоған серверлердің қажетті санын қосыңыз.

  • Бұл параметр сонымен қатар unix:///path/to/memcached.sock сияқты басқа тасымалдауларды да көрсете алады, яғни. UNIX ұяшықтарын пайдаланыңыз, бұл жағдайда порт 0-ге орнатылуы керек.
  • Розеткаларды пайдаланғыңыз келсе, бұл параметрді 0-ге орнатыңыз.
  • int $timeout - демонға қосылу үшін секундтармен шектеу. 1 секундтың әдепкі мәнін өзгертпес бұрын екі рет ойланыңыз - қосылымыңыз тым ұзақ болса, кэштеудің барлық артықшылықтарын жоғалтуыңыз мүмкін.
pconnect("localhost", 11211, 30);

Memcache::close()

Memcached серверіне қосылымды жабады. Бұл функция веб-сервер өшірілгенде/қайта іске қосылғанда ғана жабылатын тұрақты қосылымдарды жаппайды. Сондай-ақ memcache_close() функциясын пайдалануға болады.

бол Memcache::жабу int $value - мәнді азайту.

Memcache::addServer()

Қосылым пулына сервер қосады. Memcache::addServer() арқылы ашылған қосылым сценарий аяқталған кезде автоматты түрде жабылады немесе оны Memcache::close() арқылы қолмен жабуға болады. memcache_add_server() функциясын пайдалануға болады

Memcache::addServer пайдаланған кезде (Memcache::connect() және Memcache::PConnect() қарағанда), желі қосылымы қажет болғанша орнатылмайды. Осылайша, пулға серверлердің көп санын қосқанда, тіпті олар мүлдем қажет болмаса да, қосымша шығындар болмайды.

Сервер пулы ақауларға төзімділікті қамтамасыз етеді. Кез келген сокет қателері немесе сервер деңгейіндегі Memcached қателері (жад қателерінен басқа) ресурстарды қайта бөлуді тудырады. Бар кілтті қосу сияқты клиент қателері сәтсіздікке әкелмейді.

print_r($cache->get(array("менің бірінші","меніңсекунд"))));

Сәтті болса TRUE мәнін немесе қате бойынша ЖАЛҒАН мәнін береді.

бол $cache->set("someTwo", 222, 0, 5);(жол $host [, int $port = 11211 [, bool $persistent [, int $weight [, int $timeout [, int $retry_interval [, bool $status [, шақырылатын $failure_callback [, int $timeoutms ]]]] ]]]])

  • string $host - жад кэштелген хост. Бұл параметр сонымен қатар unix:///path/to/memcached.sock сияқты басқа тасымалдауларды да көрсете алады, яғни. UNIX ұяшықтарын пайдаланыңыз, бұл жағдайда порт 0-ге орнатылуы керек.
  • int $port - Memcached қосылымдарды тыңдайтын порт. Розеткаларды пайдаланғыңыз келсе, бұл параметрді 0-ге орнатыңыз.
  • bool $persistent - тұрақты қосылымды пайдалануды орнатады. Әдепкі бойынша TRUE.
  • int $weight - Мән неғұрлым үлкен болса, соғұрлым бұл сервер мәндерді сақтау үшін таңдалады. Сол. бұл жалпы пулдағы сервердің «салмағының» бір түрі, жанама түрде бұл серверде күтілетін жүктеме.
  • int $timeout - демонға қосылу үшін секундтармен шектеу. 1 секундтың әдепкі мәнін өзгертпес бұрын екі рет ойланыңыз - қосылымыңыз тым ұзақ болса, кэштеудің барлық артықшылықтарын жоғалтуыңыз мүмкін.
  • $timeoutms жолы - сипатталмаған.

Ақпарат алу

Memcache::getExtendedStats()

Сервер статистикасының екі өлшемді, ассоциативті массивін қайтарады. Сервер хостының массиві: порт кілттері. Мәндер жеке статистикалық параметрлерді қамтиды. Сәтсіз серверлерде FALSE мәні болады. Сондай-ақ memcache_get_extended_stats() функциясын пайдалануға болады

print_r($cache->get(array("менің бірінші","меніңсекунд"))));

Бұл мүмкіндік Memcache 2.0.0 нұсқасында қосылды

массив Memcache::getExtendedStats([ жол $түрі [, int $slabid [, int $лимиті = 100 ]]])

Ал енді әзіл:

Қауіпсіздік мақсатында Memcached ішінен «кэшті демп» статистикалық түрі жойылды

Ақпаратты шығару мысалы (параметрсіз шақыру):

Массив ( => 5179 => 966862 => 1336505233 => 1.4.5 => 64 => 160.302880 => 483.975109 => 6 => 358080 => 13 => 7 => 13 => 6 11507898 => 3529578 => 0 => 0 => 0 => 76 => 0 => 0 => 0 => 0 => 0 => 0 => 0 => 1643906080 => 11298732744 => 67108864 => 1 => 0 => 4 => 0 => 3295454 => 7623 => 3501915 => 0 => 1825755) ...)

Memcache::getServerStatus()

Сервердің онлайн/офлайн күйін қайтарады. Сондай-ақ функцияны пайдалануға болады memcache_get_server_status()

print_r($cache->get(array("менің бірінші","меніңсекунд"))));

Бұл мүмкіндік Memcache 2.0.0 нұсқасында қосылды

print_r($cache->get(array("бір","екі","үш")))); Memcache::getServerStatus(жол $хост [, int $port = 11211 ])

  • string $host - жад кэштелген хост.
  • int $port - Memcached қосылымдарды тыңдайтын порт.

Memcache::getStats()

Сервер статистикасы бар ассоциативті массивді қайтарады. Статистикалық параметрлерге және параметр мәніне арналған мәндерге сәйкес келетін кілттер жиымы. Сондай-ақ функцияны пайдалануға болады memcache_get_stats()

массив Memcache::getStats s ([ жол $түрі [, int $slabid [, int $лимиті = 100 ]]])

  • string $type - Статистика түрі. Жарамды мәндер: (қалпына келтіру, malloc, карталар, кэш, тақталар, элементтер, өлшемдер). Memcached протоколының спецификациясына сәйкес, бұл қосымша аргументтер «әзірлеушілерге ыңғайлы болу үшін өзгертілуі мүмкін».
  • int $slabid - Бірінші параметр "кэшті көшіру" күйіне орнатылғанда, жөндеу үшін пайдаланылатын серверді анықтайды.
  • int $limit - бірінші параметр демптегі жазбалардың санын шектеу үшін "кэшті демпке" орнатылғанда пайдаланылады.

Memcache::getVersion()

Жолды қайтарады - сервер нұсқасының нөмірі. Сондай-ақ функцияны пайдалануға болады memcache_get_version().

буфердің толып кету қателеріне бейім Memcache::getVersion int $value - мәнді азайту.

Memcache::setCompressThreshold()

Үлкен мәндерді автоматты түрде қысуды қамтамасыз етеді. Сондай-ақ функцияны пайдалануға болады memcache_set_compress_threshold()

print_r($cache->get(array("менің бірінші","меніңсекунд"))));

Бұл мүмкіндік Memcache 2.0.0 нұсқасында қосылды

бол Memcache::setCompressThreshold(int $threshold [, float $min_savings ])

  • int $threshold - автоматты түрде қысылуы қажет мәннің ең аз ұзындығы.
  • float $min_savings - қысу коэффициентін орнатады. Көрсетілген мән 0 және 1 арасында болуы керек. Әдепкі мән 0,2 болып табылады, бұл ең аз 20% қысуды үнемдейді.

Memcache::setServerParams()

Орындалу уақытында сервер параметрлерін өзгертеді. Сондай-ақ функцияны пайдалануға болады memcache_set_server_params().

Сәтті болса TRUE мәнін немесе қате бойынша ЖАЛҒАН мәнін береді.

print_r($cache->get(array("менің бірінші","меніңсекунд"))));

Бұл мүмкіндік Memcache 2.0.0 нұсқасында қосылды

бол Memcache::setServerParams(жол $хост [, int $port = 11211 [, int $уақыты [, int $retry_interval = false [, bool $status [, шақырылатын $failure_callback ]]]]])

  • string $host - жад кэштелген хост.
  • int $port - Memcached қосылымдарды тыңдайтын порт.
  • int $timeout - демонға қосылу үшін секундтармен шектеу. 1 секундтың әдепкі мәнін өзгертпес бұрын екі рет ойланыңыз - қосылымыңыз тым ұзақ болса, кэштеудің барлық артықшылықтарын жоғалтуыңыз мүмкін.
  • int $retry_interval - Сәтсіз сервердің қаншалықты жиі сұралатынын белгілейді, әдепкі мән 15 секунд. Бұл параметрді -1 мәніне орнату сұрауларды автоматты түрде қайталауды өшіреді.
  • bool $status - серверді ОНЛАЙН ретінде белгілейді. Бұл параметрді FALSE және retry_interval -1 мәніне орнату кілттерді бөлу алгоритмдеріне әсер етпеу үшін сәтсіз серверді белсенді серверлер пулында сақтауға мүмкіндік береді. Бұл серверге сұраулар қалған қол жетімді серверлер арасында таратылады. Әдепкі мән - TRUE, яғни сервер ОНЛАЙН ретінде қарастырылуы керек.
  • callable $failure_callback - пайдаланушыға қате анықталған кезде іске қосу үшін кері шақыру функциясын көрсетуге мүмкіндік береді. Функция екі параметрді, сәтсіз сервердің хост атауын және портын қабылдауы керек.

Осы жазба арқылы мен HighLoad++-2008 баяндамасының материалдарына негізделген шағын хабарламалар топтамасын ашқым келеді. Кейіннен бүкіл мәтін бір үлкен PDF түрінде жарияланады.

Кіріспе

Біріншіден, хабарламалар сериясының тақырыбы туралы: хабарламалар вебтегі кэштеу туралы (жоғары жүктелетін веб-жобаларда) және кэштеу үшін memcached пайдалану туралы және веб-жобаларда memcached басқа да пайдаланулары туралы болады. Яғни, әртүрлі комбинациялардағы атаудың барлық үш құрамдас бөлігі осы жазбалар сериясында қарастырылады.

Бүгінгі күні кэштеу кез келген веб-жобаның ажырамас бөлігі болып табылады, міндетті түрде жоғары жүктеме емес. Әрбір ресурс үшін пайдаланушы үшін маңызды сипаттама сервердің жауап беру уақыты болып табылады. Сервердің жауап беру уақытының ұлғаюы келушілердің кетуіне әкеледі. Сондықтан жауап беру уақытын барынша азайту қажет: ол үшін пайдаланушыға жауапты генерациялауға қажетті уақытты қысқарту қажет, ал пайдаланушыға жауап беру үшін кейбір сыртқы ресурстардан (бэкленд) мәліметтер алу қажет. Бұл ресурстар дерекқорлар немесе кез келген басқа салыстырмалы түрде баяу деректер көздері болуы мүмкін (мысалы, біз бос орын көлемін тексеретін қашықтағы файл сервері). Күрделі ресурстың бір бетін жасау үшін бізге ондаған ұқсас қоңыраулар жасау қажет болуы мүмкін. Олардың көпшілігі жылдам болады: 20 мс немесе одан аз, бірақ есептеу уақытын секундтармен немесе минуттармен есептеуге болатын сұраулардың аз саны әрқашан болады (тіпті ең оңтайландырылған жүйеде олардың саны ең аз болуы керек болса да, біреуі болуы мүмкін) . Сұрау нәтижелерін күтуге жұмсайтын уақыттың барлығын қоссақ (сұрауларды параллель орындасақ, біз ең ұзақ сұраудың есептеу уақытын аламыз), қанағаттанарлықсыз жауап уақытын аламыз.

Бұл мәселенің шешімі кэштеу болып табылады: біз есептеулер нәтижесін кейбір жадқа (мысалы, memcached) орналастырамыз, ол ақпаратқа қол жеткізу уақыты бойынша тамаша сипаттамалары бар. Енді баяу, күрделі және ауыр серверлерге қол жеткізудің орнына жылдам кэшке сұраныс жасау керек.

Кэштелген және кэштелген

Жергілікті жер принципі

Біз кэштерді немесе кэштеу әдісін электронды құрылғылар мен бағдарламалық жасақтаманың архитектурасында кез келген жерде көреміз: процессор кэші (бірінші және екінші деңгей), қатты диск буферлері, операциялық жүйе кэштері, автомобиль радиосындағы буфер. Кэштеудің мұндай сәттілігін не анықтайды? Жауап локальдылық принципінде жатыр: бағдарлама немесе құрылғы белгілі бір уақыт аралығында жалпы жиынтықтағы деректердің белгілі бір жиынымен жұмыс істеуге бейім. ЖЖҚ жағдайында бұл дегеніміз, егер бағдарлама 100 мекенжайында орналасқан деректермен жұмыс істесе, онда ықтималдықтың жоғары дәрежесімен келесі қатынас, мысалы, 10000 мекенжайында емес, 101, 102 және т.б. мекенжайда болады. Қатты дискіде де солай: оның буфері соңғы оқылған секторларға жақын аумақтардағы деректермен толтырылады, егер біздің бағдарламалар бір уақытта кейбір салыстырмалы түрде шағын файлдар жиынтығымен емес, қатты дискінің барлық мазмұнымен жұмыс істесе. , буферлер мағынасыз болар еді. Автокөлік стерео буфері дискідегі музыканың келесі минуттарынан бұрын оқиды, өйткені біз музыка жиынтығынан өтуден гөрі музыкалық файлды дәйекті түрде тыңдау ықтималдығы жоғары және т.б.

Веб-жобалар жағдайында кэштеу сәттілігі сайтта әрқашан ең танымал беттердің болуымен анықталады, кейбір деректер барлық немесе барлық дерлік беттерде пайдаланылады, яғни әлдеқайда жиі сұралатын кейбір таңдаулар бар. басқаларға қарағанда. Біз кэшті құру үшін серверге бірнеше қоңырауларды бір қоңыраумен ауыстырамыз, содан кейін барлық келесі қоңыраулар жылдам жұмыс істейтін кэш арқылы жасалады.

Кэш әрқашан бастапқы деректер көзінен жақсырақ: процессорлық кэш оперативті жадқа қарағанда жылдамырақ, бірақ біз жедел жадты кэш сияқты жылдам жасай алмаймыз — оның құны тиімсіз және техникалық жағынан қиын. Қатты дискінің буфері қатты дискінің өзіне қарағанда жылдамырақ деректер тапсырыстарына сұраныстарды қанағаттандырады, бірақ буферде қуат өшірілген кезде деректерді есте сақтау мүмкіндігі жоқ - бұл мағынада ол құрылғының өзінен де нашар. Жағдай Интернеттегі кэштеумен ұқсас: кэш серверге қарағанда жылдамырақ және тиімдірек, бірақ әдетте сервер қайта іске қосылған немесе бұзылған жағдайда ол деректерді сақтай алмайды, сонымен қатар кез келген нәтижелерді есептеу логикасы жоқ: ол тек бұрын салғанымызды қайтара алады.

Жад кэштелген

Memcached - бұл желі протоколы арқылы қол жеткізуге болатын үлкен жадтағы хэш-кесте. Ол кілттермен байланысты мәндерді сақтау қызметін ұсынады. Біз хэшке қарапайым желілік протокол арқылы қол жеткіземіз, клиент ерікті бағдарламалау тілінде жазылған бағдарлама болуы мүмкін (C/C++, PHP, Perl, Java және т.б. үшін клиенттер бар).

Ең қарапайым операциялар – көрсетілген кілттің мәнін алу (get), кілттің мәнін орнату (жиынтық) және кілтті жою (del). Атомдық операциялар тізбегін жүзеге асыру үшін (параллельді процестер арқылы жад-кэштеуге бір мезгілде қол жеткізуге байланысты) қосымша операциялар пайдаланылады: негізгі мәнді арттыру/азайту (incr/decr), деректерді негізгі мәнге басына немесе соңына қосу (қосу) /prepend), атомдық байланыстыру мәндерін алу/орнату (gets/cas) және т.б.

Memcached бағдарламасын Брэд Фицпатрик LiveJournal жобасындағы жұмысының бөлігі ретінде жүзеге асырды. Ол бет мазмұнына қызмет көрсету кезінде дерекқорды сұраулардан босату үшін пайдаланылды. Бүгінгі күні memcached көптеген ірі жобалардың, мысалы, Wikipedia, YouTube, Facebook және т.б.

Жалпы, кэштеу схемасы келесідей көрінеді: фронтенд (пайдаланушыға жауапты жасайтын жоба бөлігі) кейбір үлгіден деректерді алуы керек. Фронт гепардпен жылдам жад-кэштелген серверді алу кэшіне (сұраныс алу) байланыстырады. Сәйкес кілт табылса, жұмыс сонда аяқталады. Әйтпесе, көбінесе дерекқор болып табылатын ауыр, ебедейсіз, бірақ қуатты (піл сияқты) серверге жүгіну керек. Нәтиже бірден кэш (орнатылған сұрау) ретінде memcached-ге жазылады. Бұл жағдайда кілтке әдетте кэшті қалпына келтіру сәтіне сәйкес келетін максималды қызмет мерзімі (жарамдылық мерзімі) беріледі.

Бұл стандартты кэштеу схемасы әрқашан орындалады. Memcached орнына кейбір жобалар жергілікті файлдарды немесе басқа сақтау әдістерін қолдануы мүмкін (басқа дерекқор, PHP жеделдеткіш кэш және т . Соған қарамастан, біздің келесі әңгімемізде біз осы схемаға сүйенетін боламыз.

мемкэштелген архитектура

Memcached қалай жұмыс істейді? Бұл қалай тез жұмыс істей алады, тіпті сайттың бір бетін өңдеу үшін қажет memcached-ке ондаған сұраулар айтарлықтай кешіктіруге әкелмейді. Сонымен қатар, memcached есептеу ресурстары тұрғысынан өте қарапайым: жүктелген орнатуда процессордың уақыты сирек 10% -дан асады.

Біріншіден, memcached оның барлық операцияларының алгоритмдік күрделілігі O(1) болатындай етіп жасалған, яғни. кез келген операцияның орындалу уақыты жад-кэштелген сақтайтын кілттер санына байланысты емес. Бұл кейбір операциялар (немесе мүмкіндіктер), егер олардың орындалуы тек сызықтық (O(n)) уақытты қажет етсе, жоқ болатынын білдіреді. Осылайша, memcached кілттерді «қалталарға» біріктіру мүмкіндігіне ие емес, яғни. кілттердің кез келген топтамасы және біз кілттер немесе олардың мәндері бойынша топтық операцияларды таба алмаймыз.

Негізгі оңтайландырылған операциялар - бұл кілттерді сақтауға арналған жад блоктарын бөлу/босату, жад жеткіліксіз болған кезде кэшті тазалау үшін ең аз пайдаланылған кілттер (LRU) саясатын анықтау. Кілттерді іздеу хэштеу арқылы жүзеге асады, сондықтан оның күрделілігі O(1) болады.

Асинхронды енгізу/шығаруды пайдаланады және ағындарды пайдаланбайды, бұл қосымша өнімділік артуын және төменірек ресурс талаптарын қамтамасыз етеді. Шын мәнінде, memcached ағындарды пайдалана алады, бірақ бұл тым көп жүктелген жағдайда серверде қол жетімді барлық ядроларды немесе процессорларды пайдалану үшін ғана қажет - кез келген жағдайда әрбір қосылым үшін ағын жасалмайды.

Шындығында, мемкэштелген сервердің жауап беру уақыты тек желілік шығындармен анықталады және пакетті фронтенден memcached серверге (RTT) жіберуге кететін уақытқа дерлік тең деп айта аламыз. Мұндай сипаттамалар әртүрлі мәселелерді, соның ішінде деректерді кэштеуді шешу үшін жоғары жүктемелі веб-жобаларда memcached пайдалануға мүмкіндік береді.

Жоғалған кілттер

Memcached сенімді сақтау орны емес; кілттің қызмет ету мерзімі аяқталмай тұрып, кэштен жойылуы мүмкін. Жоба архитектурасы мұндай жағдайға дайын болуы керек және кілттердің жоғалуына икемді жауап беруі керек. Кілттерді жоғалтудың үш негізгі себебі бар:
  1. Басқа кілттердің мәндерін сақтау үшін жад жеткіліксіз болғандықтан, кілт жарамдылық мерзімінен бұрын жойылды. Memcached LRU саясатын пайдаланады, сондықтан бұл жоғалту кілттің сирек пайдаланылғанын және танымал кілттерді сақтау үшін кэш жадының босатылғанын білдіреді.
  2. Кілт жойылды, себебі оның қызмет ету мерзімі аяқталды. Бұл жағдай, нақты айтқанда, жоғалту емес, өйткені біз өзіміз кілттің қызмет ету мерзімін шектедік, бірақ memcached-ке қатысты клиент коды үшін мұндай жоғалту басқа жағдайлардан ерекшеленбейді - memcached-ге қол жеткізу кезінде біз «бар мұндай кілт жоқ».
  3. Ең жағымсыз жағдай - мемкэштелген процестің немесе ол орналасқан сервердің бұзылуы. Бұл жағдайда біз кэште сақталған барлық кілттерді жоғалтамыз. Кластер ұйымдастыру салдарын біршама жеңілдетуге мүмкіндік береді: жоба кілттері «таратылған» көптеген жад-кэштелген серверлер: осылайша бір кэштің құлауының салдары азырақ байқалатын болады.

Барлық сипатталған жағдайларды memcached бағдарламасымен жұмыс істейтін бағдарламалық жасақтаманы жасау кезінде есте сақтау керек. Біз memcach-де сақтайтын деректерді жоғалту дәрежесіне қарай бөле аламыз.

«Сіз оны жоғалтуыңыз мүмкін». Бұл санат дерекқор таңдауларының кэштерін қамтиды. Мұндай кілттерді жоғалту соншалықты жаман емес, өйткені біз олардың мәндерін серверге қайта кіру арқылы оңай қалпына келтіре аламыз. Дегенмен, кэшті жиі жоғалту дерекқордың қажетсіз қоңырауларына әкеледі.

«Мен жеңілгім келмейді». Мұнда сіз сайтқа кірушілердің есептегіштерін, ресурс көріністерін және т.б. Кейде бұл мәндерді тікелей қалпына келтіру мүмкін болмаса да, бұл пернелердің мәндері уақытша шектеулі мағынаға ие: бірнеше минуттан кейін олардың мәні маңызды емес және жаңа мән есептеледі.

«Біз мүлде жеңілмеуіміз керек». Memcached пайдаланушы сеанстарын сақтауға ыңғайлы - барлық сеанстарға фронтендік кластерге кіретін барлық серверлерден бірдей қол жетімді. Сонымен, мен сеанстардың мазмұнын ешқашан жоғалтқым келмейді - әйтпесе сайттағы пайдаланушылар «шығырақ» болады. Қалай аулақ болуға тырысу керек? Кластерден бірнеше жад-кэштелген серверлерде сеанс кілттерін көшіруге болады, осылайша жоғалу ықтималдығы төмендейді.

Кез келген азды-көпті дамып келе жатқан веб-жоба ерте ме, кеш пе, кэштеу арқылы жақсы шешілетін мәселелерге тап болады. Мысалы, жинақталған деректерді есептеу және/немесе іздеу көп уақытты қажет ететін кейбір сақтау орнына сақтау. Деректерді кэштеудің бірнеше нұсқасы бар: деректерді дискіге немесе жедел жадқа сақтау. Әрбір опцияның артықшылықтары мен кемшіліктері бар. Дискіге сақтау баяу, жазу әдетте операциялық жүйемен шектелетін құлыптар арқылы жүзеге асырылады. Бірақ деректер мәңгі сақталады және сервер қайта іске қосылғаннан кейін қолжетімді болады. ЖЖҚ, керісінше, жылдам, құлыпсыз, бірақ қайта жүктеу кезінде сақталмайды. Онда қайталанбаған деректерді сақтау қауіпті. Егер дискіге сақтау арқылы бәрі түсінікті және қарапайым болса, жадпен жұмыс істеу күрделірек. Бұл тапсырманы орындайтын қолданбалар бар. Олардың бірі - Memcached. Бұл мақалада біз бұл туралы айтатын боламыз.

Memcached - бұл жедел жадтағы деректерді кэштеуге мүмкіндік беретін ашық бастапқы сервер. Жоғары жылдамдыққа ие. Танымал. Онда әртүрлі бағдарламалау тілдерінде жазылған клиенттік кітапханалардың үлкен жиынтығы бар.

Php-де кітапханалардың екі нұсқасы бар: php-memcache және php-memcached. Біріншісі ескі және енді дамымаған. Екіншісі жаңа және функциялардың үлкен жиынтығына ие. Олардың арасында көбірек айырмашылықтар бар және қайсысын пайдалану керектігін өзіңіз шешесіз. Бұл мақалада php-memcached қолданылады.

Memcached-пен жақсырақ танысу үшін оның негізгі мүмкіндіктерін пайдаланатын шағын қолданбаны жасайық. Авторизация кезінде құпия сөзді болжаудан қорғауды жазамыз. Қолданбаның мәні авторизация әрекеттері сәтсіз болған жағдайда, қолданба сәтсіз әрекеттердің санын кэште сақтайды. Бұл сан белгіленген минимумнан асқанда, авторизациялау мүмкіндігі белгілі бір уақытқа блокталады. 2-3 минутқа. Бұл жағдайда біз парольді болжау тиімділігін айтарлықтай төмендетеміз.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 бір рет талап ету __DIR__. "/func.php" ; егер (! extension_loaded ("memcached") ) ( өледі ();
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33

) $USE_CACHE_PROTECTION = шын ;

$AUTH_MAX_ATTEMPTS = 5 ;


$қате = массив (); егер (IS_POST() ) ( $login = _POST("username" ) ; $password = _POST("password" ) ; if (! $login ) ( $қате [ "пайдаланушы аты" ] = "міндетті" ; ) егер (! $password ) ( $қате [ "password" ] = "талап" ; ) // INIT MEMCACHE if ($USE_CACHE_PROTECTION ) ( $cache = new Memcached() ; $cache -> addServer ( "127.0.0.1" , 11211) $cacheKey = "prefix::login-protect-" $login ; //егер ($USE_CACHE_PROTECTION && ! $қате ) ( $attempts = $cache -> get ($cacheKey ) ; // СӘТТІЛІК ӘРЕКЕТТЕРДІ ТЕКСЕРІҢІЗ. ($attempts >= $AUTH_MAX_ATTEMPTS ) ( $error [ "global" ] = "max_attempts"; ) ) //егер аутентификацияны тексеру (! $қате ) ( //TODO: db bro if ($login == $AUTH_LOGIN &&) пайдаланыңыз $password == $AUTH_PASSWORD ) ( // SUCCESS AUTH ТУРАЛЫ ДЕРЕКТЕРДІ ТАЗАЛАУ if ($USE_CACHE_PROTECTION ) ( $cache -> delete ($cacheKey ) ; ) stopAndRedirect("success.php" ) ; ) егер ($USE_CACHE_PROTECTION) / ҚОСУ ӘРЕКЕТТЕРІ егер (! $cache -> increment ($cacheKey) ) ( $cache -> set ($cacheKey, 1, 60));) ) $қате [ "жаһандық" ] = "auth_faild" ;

))

PHP-де memcached пайдалану демонстрациясы

Орнату Debian астында сервер серверімен орындалады. Егер сізде жұмыс бумасы + php5-fpm болса, командалардағы apache2-ді php5-fpm-ге ауыстырыңыз.
Жұмыс құралдары: кірістірілген редактор немесе замазка арқылы бағдарламалық жасақтаманы қосуға арналған файл менеджері.

Енді бізде бұл хостингте http://example.com веб-сайты бар делік

Алдымен PHP қалай конфигурацияланғанын анықтау керек (Memcached орнатылған болса ше?)). Ол үшін сайттың түбірінде біз уақытша кодпен info.php файлын жасаймыз

Енді оны http://example.com/info.php қарастырайық

Егер біз ұқсас жазба бар екенін көрсек, онда бәрі тәртіппен, қажетті PHP кеңейтімі орнатылған.
Олай болмаса, жұмыс істеу керек.

Memcached серверді қалай орнатуға болады

Орнату алдында репозиторийді жаңарту қажет

Apt-get жаңарту && apt-get жаңарту

Енді memcached және оған арналған PHP модулін орнатайық

Apt-get орнату memcached php5-memcache

Орнату жүріп жатыр. Ол аяқталғаннан кейін біз не болғанын тексереміз

Нәтижесінде біз осындай нәрсені көреміз

Tcp 0 0 *:11211 *:* ТЫҢДАУ 13053/memcached

Енді Apache немесе php-fpm қайта іске қосу керек

apache2 қызметін қайта іске қосу

Memcached орнату

Енді сервер орнатылғаннан кейін оны конфигурациялау қажет. Бұл қиын емес және көп уақытты қажет етпейді

Сыртқы кіруден Memcached жабылады

Көріп отырғаныңыздай, memcached әдепкі бойынша 11211 портында ілулі тұрады. Memcached-де кірістірілген аутентификация механизмдері болмағандықтан, кез келген адам сырттан қосылып, оны өз мақсаттары үшін пайдалана алады. Бұған жол бермеу үшін брандмауэр арқылы 11211 портын жабуға немесе жад-кэштелген серверді тек жергілікті хосттан пайдалануға болатындай конфигурациялауға болады. Соңғы әдіс төменде сипатталған.

  1. -l 127.0.0.1 жолын қосыңыз
  2. Қайта жүктеу жад кэштелген

    Қызметтің жад-кэштелген қайта іске қосылуы

    /etc/init.d/memcached қайта іске қосыңыз

Және тағы да тексереміз

Netstat -түртіңіз | grep мемкэштелген

Ақыр соңында біз осындай нәрсені көруіміз керек

Tcp 0 0 localhost.localdo:11211 *:* ТЫҢДАУ 13092/memcached

Сондай-ақ, барлық өзгерістерден кейін Apache-ді қайта іске қосуды ұмытпаңыз

apache2 қызметін қайта іске қосу

Memcached жұмыс жадысының көлемін ұлғайту

Әдепкі бойынша, Memcached 64 мегабайт жедел жадты пайдалану үшін бөлінген. Мен 1024-ке дейін көбейтемін, сіз сервер параметрлерінен әрекет етесіз

  1. vi конфигурация файлын /etc/memcached.conf ашыңыз
  2. -m 64 мәнін табыңыз
  3. Оны -m 1024 етіп өзгертіңіз
  4. Жад-кэштелген қызметті қайта іске қосыңыз, жад-кэштелген қайта іске қосыңыз

PHP сеанстарын Memcached ішінде сақтау

Егер бірнеше түрлі сайттар бірдей Memcached серверін немесе кластерін пайдаланса, олар бір-бірінің сеанстарына кедергі жасап, пайдаланушы тіркелгілеріне қол жеткізе алады, бұл ықтимал қауіп төндіреді.

Memcached көмегімен сеанс жадын HDD-ден ЖЖҚ-ға жылжыту арқылы PHP жылдамдығын арттыруға болады

Сіз қандай PHP кеңейтімін пайдаланып жатқаныңызды білуіңіз керек, memcache немесе memcached. , және сіз phpinfo() арқылы не бар екенін біле аласыз, параметрлерде нәзіктіктер бар, абай болыңыз

Memcache кеңейту әдісі

  1. /etc/php5/mods-available/memcache.ini ашыңыз
  2. session.save_handler қосу = memcache session.save_path = "tcp://127.0.0.1:11211"

MemcacheD кеңейту әдісі

  1. /etc/php5/mods-available/memcached.ini ашыңыз
  2. session.save_handler қосу = memcached session.save_path = "127.0.0.1:11211"
  3. apache қызметін қайта іске қосыңыз apache2 қайта іске қосыңыз

phpinfo тексерілуде

Енді біз шығыста не бар екенін тексеруіміз керек. Ол үшін phpinfo() арқылы бетті ашыңыз және жергілікті мәндері бар бағандағы session.save_path кодын қараңыз. Мән tcp://127.0.0.1:11211 немесе 127.0.0.1:11211 ..conf болуы керек және біз іздейміз
php_admin_value session.save_path

Айтпақшы, php_value директивасын бүкіл серверді емес, тек белгілі бір сайттарды конфигурациялау үшін пайдалануға болады. Ол үшін сайтыңыздың түбірінде .htaccess файлын өңдеуге болады

Php_value session.save_handler "memcache" php_value session.save_path "tcp://127.0.0.1:11211"

Дайын жұмыс істейтін Memcached конфигурация файлы

Сіз сондай-ақ барлығын қажеттіліктеріңізге сай теңшей аласыз, конфигурация файлында егжей-тегжейлі түсініктемелер бар:

# memcached әдепкі конфигурация файлы № 2003 - Джей Бончи< ># Бұл конфигурация файлы Debian GNU/Linux дистрибутивінің # бөлігі ретінде берілген старттық жад-кэштелген сценарий арқылы оқылады. # Демон ретінде мемкэштелген іске қосыңыз. Бұл пәрмен болжалды және # демонның іске қосылуы үшін қажет емес. Қосымша # ақпарат алу үшін осы бумамен бірге келетін README.Debian қараңыз. -d # /var/log/memcached логфайлына /var/log/memcached.log файлына журнал жадында сақталған журналдың шығысы # Толық болыңыз # -v # Одан да егжей-тегжейлі болыңыз (басып шығару клиентінің пәрмендерін де) # -vv # Бастауыштан бастаңыз Бұл ақылға қонымды және демонның әдепкі мәні # Демон осы өлшемге дейін өсетінін ескеріңіз, бірақ осыншама # жадты ұстай алмайды # Кэштеу үшін бөлінген мегабайттағы жад көлемі. Әдепкі бойынша, 64 мегабайт. #-m 64 -m 1024 # Memcached ілінетін порт, әдепкі бойынша 11211 -p 11211 # Демонды түбір ретінде іске қосыңыз. Осы конфигурация файлында # -u пәрмені болмаса -u memcache # Қай IP мекенжайын тыңдау керектігін көрсетіңіз. Әдепкі параметр барлық IP мекенжайларын тыңдау болып табылады # Бұл параметр жад кэштелген жалғыз қауіпсіздік шараларының бірі болып табылады, сондықтан # оның брандмауэрмен жабдықталған интерфейсте тыңдап жатқанына көз жеткізіңіз. -l 127.0.0.1 # Бір мезгілде кіріс қосылымдарының санын шектеңіз. Демонның әдепкі мәні 1024 # # -c 1024 # Барлық беттелген жадты құлыптау Бұл әрекетті орындамас бұрын README және басты бетпен кеңесіңіз # -k # Жад таусылғанда қатені қайтарыңыз (элементтерді жоюдың орнына) # -M # Негізгі файлды үлкейтіңіз. шектеу # -r

Memcache кеңейтімі орнатылуда

Төменде консольден memcache PHP кеңейтімін қолмен орнатуға болатын қадамдық пәрмендер берілген.

Apt-get орнату php5-dev libmemcache-dev pecl жүктеп алу memcache tar xzvf memcache-2.2.6.tgz cd memcache-2.2.6/ phpize && ./configure --enable-memcache && cp модульдерін жасау/memcache.so /usr lib/php5/20060613/ echo "extension=memcache.so" >> /etc/php5/apache2/php.ini

Өзгерістердің күшіне енуі үшін Apache бағдарламасын қайта жүктеңіз.

apache2 қызметін қайта іске қосу

Memcached жұмыс істеп тұрғанын қалай тексеруге болады

Сайттың түбірінде memcachetest.php файлын жасап, сол жерге келесі кодты жазайық

connect("localhost", 11211) немесе exit("Memcached серверіне қосылу мүмкін емес"); $нұсқа = $memcache->getVersion(); echo "Сервер" нұсқасы: ".$version."
\n"; $tmp_object = new stdClass; $tmp_object->str_attr = "test"; $tmp_object->int_attr = 123; $memcache->set("key", $tmp_object, false, 10) немесе өлу ("Жоқ" Мен Memcached-де жазба қалдыра алдым»); echo «Деректерді Memcached кэшіне жазамыз (деректер 10 секунд сақталады)
\n"; $get_result = $memcache->get("key"); echo "Memcached жүйесіне жазылған деректер:
\n"; var_dump($get_result); ?>

Енді нәтижелерді тексеру ғана қалды: http://example.com/memcachetest.php
Егер сіз бәрін дұрыс жасасаңыз, сіз осындай нәрсені көресіз

phpMemcachedAdmin - Memcached мониторингі, статистикасы және басқару

phpMemcachedAdmin — Linux жүйесінде Memcached қызметін бақылау және басқару үшін веб-интерфейсті қамтамасыз ететін бағдарламалық құрал. Сервер қолдайтын барлық операциялардың нақты уақыттағы статистикасын көруге мүмкіндік береді: алу, орнату, жою, арттыру, азайту, қалпына келтіру, шығару, CA, сонымен қатар сервер статистикасы: желі, позициялар, жұмыс нұсқасы, диаграммалармен және ішкі біріктірілген сервер конфигурациясы.

phpMemcachedAdmin орнату және конфигурациялау

Мұнда сіз бірнеше жолмен жүре аласыз: осы қызметтің жұмысы үшін бөлек доменді немесе қосалқы доменді бөліңіз. Немесе сіз өзіңіздің жұмыс сайтыңызда ішкі каталог жасай аласыз және оған құпия сөзді немесе . Қалтаға құпия сөзді орнатудың соңғы әдісін қарапайымырақ сипаттаймын.

Сонымен, бізде https://site сайты бар делік

CD /var/www/site

Каталог жасаңыз және оған өтіңіз

Mkdir phpMemcachedAdmin && CD phpMemcachedAdmin

Таратудың соңғы нұсқасын жүктеп алыңыз

Wget http://phpmemcacheadmin.googlecode.com/files/phpMemcachedAdmin-1.2.2-r262.tar.gz

Тарату мұрағатын орау және жою

Tar -xvzf phpMemcachedAdmin-1.2.2-r262.tar.gz && rm -rf phpMemcachedAdmin-1.2.2-r262.tar.gz

Ағымдағы каталогта қажетті қатынас құқықтарын рекурсивті түрде орнатыңыз

./ -түрін табу f -exec chmod 0644 () \; табу ./ -түрі d -exec chmod 0755 () \;

AuthType Негізгі AuthName "Жеке аймақ" AuthUserFile .htpasswd Пайдаланушы memcachedmanager талап етеді

Create.htpasswd

Htpasswd -c .htpasswd memcachedmanager

Құпия сөзіңізді енгізіңіз.

Бар болғаны. Егер сіз оны өзгертпеген болсаңыз, memcachedmanager каталогына кіріңіз. https://site/phpMemcachedAdmin ашыңыз (доменді өзіңіздікіне өзгертіңіз), логин/парольді енгізіңіз және пайдаланыңыз

Қорытындысында

Мен memcached туралы мақаланы оқуды ұсынамын. Ол туралы жалпы мәліметтерді және оның жұмысының кейбір нәзіктіктерін ашады.
Бар болғаны. Егер бірдеңе түсініксіз болса, түсініктемелерде сұрақтар қойыңыз.



Бөлісу