06 Οκτ 2017

Εγκατάσταση και χρήση της Memcached

Εγκατάσταση και χρήση της Memcached

Η memcached είνα ένα σύστημα caching ανοιχτού κώδικα . Χρησιμοποιείται για να αποθηκεύει δεδομένα στην RAM . Επειδή η RAM είναι γρηγορότερη από τον δίσκο που είναι αποθηκευμένη μια ιστοσελίδα ή μία βάση δεδομένων , η memcached χρησιμεύει στο να κάνει γρηγορότερες ιστοσελίδες και εφαρμογές . Μαζί θα δούμε πως να εγκαταστήσουμε την memcached σε ένα σύστημα Debian 8 ,όπως και θα κάνουμε μερικά τεστ . 

Πριν την εγκατάσταση καλό είναι να έχουμε έναν non-root-sudo λογαριασμό χρήστη .

 

Εγκατάσταση της memcached και των components της

Πριν κάνουμε την εγκατάσταση θα κάνουμε update την apt get . Επίσης θα χρειαστούμε την mySQL και την php . Οπότε εκτελούμε τα παρακάτω : 

sudo apt-get update

sudo apt-get install mysql-server php5-mysql php5 php5-memcached memcached

‘Ελεγχος της Εγκατάστασης

Η εγκατάσταση της memcached λογικά έχει γίνει .Για να το ελέγξουμε θα χρησιμοποιήσουμε το info page της PHP .

sudo vi /var/www/html/info.php

Σε αυτό το αρχείο θα γράψουμε την παρακάτω συνάρτηση , που εμφανίζει σε ένα web layout της πληροφορίες της php

<?php
phpinfo();
?>

Τώρα αν μπούμε από έναν browser στην παρακάτω διεύθυνση

http://server_domain_name_or_IP/info.php

Λογικα θα δούμε το info page

Κάνουμε scroll ή search για να βρούμε το section της memcached που έχει την παρακάτω μορφή

memcached.PNG

Αυτό σημαίνει ότι το extension της memcached είναι ενεργοποιημένο και δουλεύει.

 

Δοκιμάζουμε αν η memcached μπορεί να αποθηκεύσει δεδομένα

Τώρα που ξέρουμε οτι η memcached τρέχει , θελουμε να δούμε αν μπορεί να αποθηκέυσει δεδομένα (caching) . ΓΙα να το κάνουμε αυτό θα φτιάξουμε ένα script με PHP .

sudo vi /var/www/html/cache_test.php

Μέσα στο αρχείο γράφουμε το script :

<?php

$mem = new Memcached();

$mem->addServer("127.0.0.1", 11211);

$result = $mem->get("blah");

if ($result) {

   echo $result;

} else {

   echo "No matching key found.  I'll add that now!";

   $mem->set("blah", "I am data!  I am held in memcached!") or die("Couldn't save anything to

memcached...");
}
?>

Ας εξηγήσουμε λίγο πως δουλεύει :

Αφού τελειώσουμε με το script , το αποθηκεύουμε , και απο έναν browser ανοίγουμε τη σελίδα :

http://server_domain_name_or_IP/cache_test.php

Αρχικά η σελίδα πρέπει να έχει την εξής μορφή :

κευ1.PNG

‘Οταν κάνουμε όμως refresh πρέπει να δούμε ΄αυτό :

κευ2.PNG

Αυτό σημαίνει ότι η memcached έκανε το caching επιτυχώς

 

Δοκιμάζουμε αν η memcached μπορεί να αποθηκεύσει αποτελέσματα από ερωτήματα στην βάση δεδομένων

Αφού είδαμε ‘οτι η memcached μπορεί να αποθηκε’υσει αρχε’ια θα δοκιμάσουμε τώρα ένα πιο ρεαλιστικό σενάριο : να αποθηκεύσουμε προσωρινά αποτελέσματα απο μια ερώτηση σε μια βάση δεοδμένων :

Θα μπούμε αρχικά στην MySQL

mysql -u root -p

Φτιάχνουμε μια πειραματική βάση δεδομένων

CREATE DATABASE mem_test;
USE mem_test;

Τώρα ας φτιάξουμε ένα χρήστη test με password testing123 που θα έχει πρόσβαση σε αυτή τη βάση

GRANT ALL ON mem_test.* TO test@localhost IDENTIFIED BY 'testing123';

Φτιάχνουμε έναν πολύ βασικό πίνακα μέσα στη βάση και του εισάγουμε κάποιες τυχαίες πληροφορίες

CREATE TABLE sample_data (id int, name varchar(30));

INSERT INTO sample_data VALUES (1, "some_data");

Τώρα τελείωσαμε με την MySQl και μπορούμε να κάνουμε Exit

exit

Τo επόμενο πράγμα που πρέπει να κάνουμε είναι να φτιάξουμε το PHP script που θα κάνει cache τα δεδομένα της MySQL .

sudo vi /var/www/html/database_test.php

Μέσα στο αρχείο γράφουμε τα παρακάτω :

<?php

$mem = new Memcached();

$mem->addServer("127.0.0.1", 11211);

mysql_connect("localhost", "test", "testing123") or die(mysql_error());

mysql_select_db("mem_test") or die(mysql_error());

$query = "SELECT name FROM sample_data WHERE id = 1";

$querykey = "KEY" . md5($query);

$result = $mem->get($querykey);

if ($result) {

   print "<p>Data was: " . $result[0] . "</p>";

   print "<p>Caching success!</p><p>Retrieved data from memcached!</p>";

} else {

   $result = mysql_fetch_array(mysql_query($query)) or die(mysql_error());

   $mem->set($querykey, $result, 10);

   print "<p>Data was: " . $result[0] . "</p>";

   print "<p>Data not found in memcached.</p><p>Data retrieved from MySQL and stored in

memcached for next time.</p>";
}

Τώρα που φτιάξαμε το script θα δοκιμάσουμε να το τρέξουμε απο έναν browser ,

http://server_domain_name_or_IP/database_test.php

Όταν πρωτοδούμε τη σελίδα , λογικά θα είναι έτσι

data1.PNG

Αν κανουμε refresh μέσα σε 10 δευτερόλεπτα θα είναι έτσι

data2.PNG

Στο script ορίσαμε το caching να κάνει expire σε 10 δευτερόλεπτα .Για αυτό αν περιμένουμε λίγο και κάνουμε refresh θα πάρουμε πάλι το πρώτο μήνυμα .

Γενικά μπορούμε να ρυθμίσουμε το caching σύμφωνα με τις ανάγκες του server μας .