JeuWeb - Crée ton jeu par navigateur
Article Utiliser la ram pour stocker des données volatiles - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Article Utiliser la ram pour stocker des données volatiles (/showthread.php?tid=8212)



Utiliser la ram pour stocker des données volatiles - Xenos - 14-09-2020

[POO] Utiliser la ram pour stocker des données volatiles

Bonjour à tous,
Voici un petit tuto pour vous présenter un système de cache bien utile que j'utilise notamment sur http://www.adelian.net

A quoi ça sert ?

Ça sert simplement à stocker des variables, que ce soit objet, tableau ou objets, dans la ram du serveur pendant un certains temps.
On peut comparer ça à un système de session, mais partagé.

Comment ça marche ?

Et bien d'abord il vous faut une classe pour s'interface avec le démon memcached. Si il n'est pas installé sur votre machin, un simple
apt-get install memcached php5-memcache suffit.
Voici la classe en question :

<?php
 
class Cache extends Memcache
{
    private static $_cache;
    public static $cache_server;
    public static $cache_port;
 
    // --------------------------------------------------------------
    public function __construct() {
    // --------------------------------------------------------------
        self::$cache_server    = "localhost":
        self::$cache_port        = "11211";
    }
 
    // --------------------------------------------------------------
    public function __destruct() {
    // --------------------------------------------------------------
        if (!empty(self::$_cache)) self::$_cache->close();
    }
 
    // --------------------------------------------------------------
    public function get($key) {
    // --------------------------------------------------------------   
        return self::getConnexion()->get($key);   
    }
 
    // --------------------------------------------------------------
    public function set($key,$donnee,$delay=0) {
    // --------------------------------------------------------------
        return self::getConnexion()->set($key,$donnee,false,$delay);   
    }
 
    // --------------------------------------------------------------
    static function getConnexion()
    // --------------------------------------------------------------
    {
        if (empty(self::$_cache))
        {
            self::$_cache = new Memcache();
            self::$_cache->connect(self::$cache_server,self::$cache_port);
        }
        return self::$_cache;
    }
 
}
 
?>

Une fois cette classe créer, vous utiliser le système comme ceci :

$oCache = Cache::getConnexion(); // récupération d'une instance de la classe
$array = array('toto','titi','tata'); // tableau d'exemple prêt à être mis en cache
$oCache->set('tableau',$array,0); // mise en cache du tableau avec comme clé "tableau" et comme durée 0 (infini)
// pour récuperer le tableau plus tard, rien de plus simple
$array = $oCache->get('tableau');

Quel intérêt ?

Cette classe peut être utile par exemple pour savoir en direct le nombre de gens en ligne (et d'autres détails) sans accèder à votre base de données, elle peut également mettre en cache vos requêtes sql, ou par exemple lister les gens en ligne à un endroit donné sur une carte.
Les possibilités sont énormes .

Composé par mdcarter