CLOUD CONCEPT
Νερατζιωτίσσης 15, Μαρούσι, Αθήνα, 15124, Αττική
+30 211 8005 401
info@c2.gr
Η memcached είνα ένα σύστημα caching ανοιχτού κώδικα . Χρησιμοποιείται για να αποθηκεύει δεδομένα στην RAM . Επειδή η RAM είναι γρηγορότερη από τον δίσκο που είναι αποθηκευμένη μια ιστοσελίδα ή μία βάση δεδομένων , η memcached χρησιμεύει στο να κάνει γρηγορότερες ιστοσελίδες και εφαρμογές . Μαζί θα δούμε πως να εγκαταστήσουμε την memcached σε ένα σύστημα Debian 8 ,όπως και θα κάνουμε μερικά τεστ .
Πριν την εγκατάσταση καλό είναι να έχουμε έναν non-root-sudo λογαριασμό χρήστη .
Πριν κάνουμε την εγκατάσταση θα κάνουμε 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
phpinfo();
?>
Τώρα αν μπούμε από έναν browser στην παρακάτω διεύθυνση
http://server_domain_name_or_IP/info.php
Λογικα θα δούμε το info page
Κάνουμε scroll ή search για να βρούμε το section της memcached που έχει την παρακάτω μορφή
Αυτό σημαίνει ότι το extension της memcached είναι ενεργοποιημένο και δουλεύει.
Τώρα που ξέρουμε οτι η memcached τρέχει , θελουμε να δούμε αν μπορεί να αποθηκέυσει δεδομένα (caching) . ΓΙα να το κάνουμε αυτό θα φτιάξουμε ένα script με PHP .
sudo vi /var/www/html/cache_test.php
Μέσα στο αρχείο γράφουμε το script :
$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
Αρχικά η σελίδα πρέπει να έχει την εξής μορφή :
‘Οταν κάνουμε όμως refresh πρέπει να δούμε ΄αυτό :
Αυτό σημαίνει ότι η memcached έκανε το caching επιτυχώς
Αφού είδαμε ‘οτι η 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
Μέσα στο αρχείο γράφουμε τα παρακάτω :
$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 "
Data was: " . $result[0] . "
";Caching success!
Retrieved data from memcached!
";Data was: " . $result[0] . "
";Data not found in memcached.
Data retrieved from MySQL and stored in
memcached for next time.
Τώρα που φτιάξαμε το script θα δοκιμάσουμε να το τρέξουμε απο έναν browser ,
http://server_domain_name_or_IP/database_test.php
Όταν πρωτοδούμε τη σελίδα , λογικά θα είναι έτσι
Αν κανουμε refresh μέσα σε 10 δευτερόλεπτα θα είναι έτσι
Στο script ορίσαμε το caching να κάνει expire σε 10 δευτερόλεπτα .Για αυτό αν περιμένουμε λίγο και κάνουμε refresh θα πάρουμε πάλι το πρώτο μήνυμα .
Γενικά μπορούμε να ρυθμίσουμε το caching σύμφωνα με τις ανάγκες του server μας .