01-12-2010, 10:57 AM
memcache est un solution de gestion de cache, que ce soit ça, du cache fichier, ram disque (que l'on utilise au boulot), cache APC ou le cache inclue dans la zend platform (qui parait-il est très mauvais) ce n'est qu'un mode de stockage, décider de quand on cache, quand on charge depuis le cache et quand on renouvelle est différent.
Pour reprendre l'exemple de l'inventaire, le principe est le suivant :
Dans ta classe usine, lorsque tu souhaite charger l'inventaire d'un personnage, tu vérifies s'il est présent dans le cache, si oui tu le prend, sinon tu le reconstruis et tu le stockes (avec une clé)
Ensuite, il faut identifier les différents endroits où ton objet est susceptible d'avoir été modifié (le joueur achète, trouve, vend on objet, un autre joueur lui vole un objet) dans ces cas là, tu supprimes simplement l'élément du cache... au prochain appel il sera alors reconstruit.
Je ne suis pas encore à la gestion de l'inventaire, mais c'est déjà ce que j'utilise pour les maps, celle-ci peuvent être assez complexe et tapent sur 4 ou 5 tables (voir plus si je prend la configuration des interactions sur les cases) et du coup, je stocke cette map en cache.
Bon après il y a des astuces pour stocker un objets complexe en cache, sans stocker les objets "vivants" en même temps (comme les personnages en mouvement sur la map) mais autant lancer un sujet complet sur le cache alors...
Pour ce qui est des actions avec pré-conditions d'exécution, j'ai aussi réfléchi au problème et j'ai peut-être une solution (non testée) si tu veux, ça m'intéresse d'en discuter...
Pour reprendre l'exemple de l'inventaire, le principe est le suivant :
Dans ta classe usine, lorsque tu souhaite charger l'inventaire d'un personnage, tu vérifies s'il est présent dans le cache, si oui tu le prend, sinon tu le reconstruis et tu le stockes (avec une clé)
Ensuite, il faut identifier les différents endroits où ton objet est susceptible d'avoir été modifié (le joueur achète, trouve, vend on objet, un autre joueur lui vole un objet) dans ces cas là, tu supprimes simplement l'élément du cache... au prochain appel il sera alors reconstruit.
Je ne suis pas encore à la gestion de l'inventaire, mais c'est déjà ce que j'utilise pour les maps, celle-ci peuvent être assez complexe et tapent sur 4 ou 5 tables (voir plus si je prend la configuration des interactions sur les cases) et du coup, je stocke cette map en cache.
Bon après il y a des astuces pour stocker un objets complexe en cache, sans stocker les objets "vivants" en même temps (comme les personnages en mouvement sur la map) mais autant lancer un sujet complet sur le cache alors...
Pour ce qui est des actions avec pré-conditions d'exécution, j'ai aussi réfléchi au problème et j'ai peut-être une solution (non testée) si tu veux, ça m'intéresse d'en discuter...