1: OUI. Et je recommande vivement de stocker les sessions PHP dans Memcached. Voici pourquoi :
Memcached est idéal pour stocker de petits morceaux de données fréquemment consultés par la base de données et le système de fichiers.
Memcached a été spécifiquement conçu pour les sessions. C'était à l'origine l'idée du développeur principal de livejournal.com et a ensuite été utilisé pour mettre en cache le contenu des publications des utilisateurs. Le bénéfice était immédiat : la plupart des actions se déroulaient en mémoire. Les temps de chargement des pages ont considérablement été améliorés.
Heureusement, PHP et Apache ont une mise en œuvre facile pour gérer les sessions avec Memcached. Il suffit d'installer avec quelques commandes shell
exemple pour Debian :
sudo apt-get -t stable install php7.4-memcached
et
modifier vos paramètres php.ini pour quelque chose de similaire à :
(retrouvé sur https://www.php.net/manual/en/memcached.sessions.php)
session.save_handler = memcached
; changer le serveur:port selon vos besoins...
session.save_path = "localhost:11211"
La clé est le session.save_path
Elle ne pointera plus vers un chemin de fichier relatif sur votre serveur. APC a été mentionné - APC pour le mise en cache des fichiers .php utilisés par le programme. APC et Memcached réduiront considérablement les E/S et libéreront Apache/Nginx pour servir les ressources, telles que les images, plus rapidement.
2: Non
3: L'inconvénient fondamental d'utiliser Memcached est la volatilité des données
Les données de session ne sont pas persistantes dans Memcached. Donc si et quand le serveur plante, toutes les données en mémoire sont perdues. Tout le monde devra se reconnecter.
Et puis vous avez la consommation de mémoire...
Rappelez-vous : les sessions sont stockées en mémoire. Si votre site gère un grand nombre d'utilisateurs simultanés, vous devrez peut-être débourser un peu plus d'argent pour une allocation de mémoire plus importante.
0 votes
Une troisième option consiste à stocker les sessions dans la base de données. Vous pouvez utiliser la méthode session_set_save_handler() : php.net/manual/en/function.session-set-save-handler.php. Vous bénéficierez d'un avantage en termes de performances qui sont plus faciles à mettre à l'échelle.
2 votes
Ne jamais utiliser une base de données comme gestionnaire de sessions. C'est un très mauvais conseil de la part de @Jabari. En réalité, vous devriez minimiser l'utilisation des bases de données au strict nécessaire pour économiser la charge et la mémoire. C'est pourquoi nous avons des outils comme memcached et apc. J'utilise memcached pour les lectures/écritures fréquentes comme les sessions et apc pour stocker des données qui sont assez constantes comme des articles et des options pour les boîtes de sélection dans les formulaires. La base de données est alors utilisée comme une solution de secours et pour réinitialiser memcache et apc si nécessaire...
0 votes
@Jette Gardez à l'esprit que ce commentaire date de 2012. Oui, memcache et/ou Redis sont de bien meilleures options.
0 votes
J'ai essayé même avant 2012, et c'était un désastre.
0 votes
@Jette J'ai fait cela d'innombrables fois avec des taux de trafic extrêmement élevés sans problème. Mettre en œuvre quelque chose et le mettre en œuvre correctement ne sont pas toujours la même chose. C'est un point discutable car memcache, Redis et d'autres solutions sont bien meilleures pour la tâche, comme je l'ai mentionné ci-dessus. Cela dit, je serais heureux de jeter un œil à l'implémentation que vous avez faite. Avez-vous un lien ou un exemple de code?
1 votes
@Jabari, je ne suis pas en mesure de linker vers une implémentation où la base de données est utilisée en tant que gestionnaire de session. Nous avons essayé brièvement puis sommes passés à memcache. La charge de lecture/écriture sur la base de données était beaucoup trop lourde. Peut-être que le serveur de base de données utilisé à l'époque n'était pas assez grand pour la tâche, mais la différence entre utiliser mysql en tant que gestionnaire de session et utiliser quelque chose d'autre était tellement évidente que je ne le referais jamais.