7
votes

Persister de manière native des données sur les demandes PHP

Je veux mettre en cache des données sur des demandes PHP plutôt que de la tirer de la base de données pendant chaque appel. Les données s'appliquent universellement indépendamment de l'utilisateur / de la session. Quelle est la méthode la plus légère consistant à y parvenir? Je ne peux pas garantir l'accès à l'écriture au lecteur ou besoin d'APC. Y a-t-il un moyen de faire la réalisation de cela avec Vanilla PHP? Merci!


1 commentaires

PHP est généralement invoqué Per-Pageload, donc au moins dans une configuration typique, no.


5 Réponses :


0
votes

Je ne pense pas que ce soit possible. Vous pouvez toujours précharger les données simplement une fois dans une session PHP qui réduira définitivement le nombre de requêtes de base de données.


0 commentaires

3
votes

Il y a plusieurs façons de «mettre en cache», une base de données peut être l'une d'entre elles. Une autre option que vous pouvez essayer est des fichiers XML, mais tout dépend de votre problème spécifique.


0 commentaires

13
votes

Il y a 3 «façons» qui me viennent à l'esprit lorsque vous le demandez, mais avant de les résumer, laissez-moi dire que PHP n'est pas conçu pour faire ce que vous voulez. Il n'y a pas de système de mise en cache «universel» pour les données interrogées (ou accumulées). Cependant, vous pouvez faire plusieurs choses pour accélérer vos charges de page et vos demandes de données:

  1. session ( exigences: prise en charge des cookies pour un utilisateur et leurs demandes pour chaque nouvel utilisateur)
  2. Fichier de cache ( Exigences: accès à l'écriture au lecteur)
  3. mettant en cache la requête ( exigences: capable de mettre en cache la requête dans mysql)

    Les premières sessions sont plutôt évidentes, mais vous ne devez l'utiliser que si les données sont dépendantes de l'utilisateur (sinon, essayez de l'éviter). Pour Fichier de mise en cache Vous aurez besoin d'un accès en écriture , mais c'est la meilleure méthode pour les données larges du site. Il suffit d'utiliser des tableaux Serialized (Fichier uni) ou des données XML, ce qui correspond à vos besoins. Le dernier est un excellent moyen d'accélérer les demandes MySQL (s'ils sont les mêmes à chaque fois et que vous n'avez aucun accès en écriture au système). Vous cah cache la requête dans la base de données, en utilisant Cached Select .

    Comme vous pouvez voir toutes ces méthodes ont leurs propres avantages et inconvénients, mais vous pouvez les utiliser tous comme vous le souhaitez. Une seule note est que cela prend du temps pour charger des données en cache à partir de fichier ou de session, vous devriez donc vérifier si la mise en cache accélère réellement les demandes!


1 commentaires

Merci pour la réponse complète. Query Caching semble être ma meilleure option car la base de données MySQL est le seul système que je peux compter sur.



0
votes

Pour avoir un système de système / application typique, vous avez besoin d'un accès en écriture de système de fichiers ou d'avoir quelque chose comme APC disponible.

Le seul autre moyen de mettre les données de cache est de la définir à la session pour chaque utilisateur, où si la clé de session "My-cache" n'existe pas, obtenez de la base de données et définie à la session. Tout comme avec une autre méthode de mise en cache, vous devrez également réfléchir à désétablir le cache lorsque les données sont mises à jour, etc.

Ce n'est pas du tout idéal pour avoir des données d'application mis en cache du côté client, mais si vous avez besoin de cache où les options de mise en cache ne sont pas disponibles, c'est votre seule option.


0 commentaires

3
votes

P.S:

Si vous souhaitez que votre site Web fonctionne bien, vous devez toujours essayer d'installer APC. APC est principalement / aussi un opcode-cache qui accélère énormément votre site Web, mais ci-dessous essaye toujours de vous donner quelques alternatives rapides.

redistogo.com

Redis est une source ouverte, avancée magasin de la valeur clé. Il est souvent référé à un serveur de structure de données depuis Les clés peuvent contenir des cordes, des hachages, Listes, ensembles et ensembles triés.

redistogo.com offre gratuitement Redis Server (Fast) avec 5 Mo de mémoire. Vous pouvez simplement utiliser simplement une simple vanille redis-client comme par exemple prédis pour se connecter au serveur ReDIS et mettre en cache vos données.

/ dev / shm

Y a-t-il un moyen de faire fonctionner cela avec vanille php? Merci!

Vous pouvez essayer d'utiliser cache_lite (bibliothèque de vanille) et essayez écrire à / dev / shm (mémoire partagée), mais vous avez besoin de Linux os pour cela. Introduction page indique la base. Si possible, vous devez utiliser cache_dir => '/ dev / shm' xxx

Vous pouvez toujours utiliser ce paquet pour écrire sur le disque (lent par rapport à la mémoire), mais est également la mise en cache et pourrait accélérer votre site Web.


0 commentaires