Eram bulversat. Deodata, situl la care lucram si era destul de nou, reusea cumva sa supraincarce procesorul serverului in asa hal, incat nici macar nu ma puteam loga in mai putin de 20 de secunde… daramite sa mai dau un banal “grep”!
“El maestro” ma bazaie pe GTalk: “Sefu’! Imi omori serveru’! Pune si tu un memcache, ceva!”
Huh?! Parca am auzit de memcache. Dai pe google! In 3 secunde “yum install php-pecl-memcache”, instaleaza “El maestro” demonul, opreste httpd-ul ca sa il configureze (asa era de incarcat procesorul incat nu putea sa configureze demonul de memcache!) si ii da drumul.
Repornesc apache-ul si in 5 minute 50% din rezultatele query-urilor de mysql erau mutate pe memcache:
$memcache = new Memcache; $memcache->connect('localhost', 11211); $rows = $memcache->get("UNIQUE_ID".$query); if (!$rows) { $query = "select bla_bla from bla limit 10"; $result = mysql_query($query); $rows = array(); while ($row = mysql_fetch_assoc($result)) $rows[] = $row; $memcache->set("UNIQUE_ID".$query, $rows, false, 2600 + rand(0, 3600)); } foreach($rows as $row) { //do your thing }
Rezultatele? Infricosator de bune!
[root@- www]# telnet localhost 11211 Trying 127.0.0.1. Connected to localhost.localdomain (127.0.0.1). Escape character is .^].. stats STAT pid 22162 STAT uptime 94932 STAT time 1273161939 STAT version 1.2.8 STAT pointer_size 32 STAT rusage_user 9.150608 STAT rusage_system 25.857069 STAT curr_items 22086 STAT total_items 27106 STAT bytes 5533400 STAT curr_connections 5 STAT total_connections 33875 STAT connection_structures 76 STAT cmd_flush 0 STAT cmd_get 110985 STAT cmd_set 27106 STAT get_hits 84537 STAT get_misses 26448 STAT evictions 0 STAT bytes_read 14775620 STAT bytes_written 100118868 STAT limit_maxbytes 33554432 STAT threads 5 STAT accepting_conns 1 STAT listen_disabled_num 0 END
Adica, are in cache peste 76% din rezultate! Serverul se misca acum, paginile se incarca, MySQL-ul nu mai taraie dupa el coada de 100 de query-uri.
Viva Memcache!
P.S. Atentie, sa nu puneti in cache valori prea mari sau care se perimeaza repede!