IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Conseil pour utiliser memcached [PHP 7]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de Geoffrey74
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2007
    Messages : 515
    Par défaut Conseil pour utiliser memcached
    Bonjour,

    dans un soucis d'optimisation de mes ressources systèmes, je me suis penché sur l'utilisation de memcached.

    J'ai bien compris son fonctionnement, comment l'utiliser basiquement (get, set), mais je me pose encore quelques questions pour l'utiliser a bon escient en complément/remplacement d'un système de cache de fichier.


    Mes questions vont concerner son utilisation dans un site d'annonces d'emploi, avec des annonces et des profils utilisateurs.


    J'ai actuellement toutes mes pages d'offres d'emploi et de profils qui sont en cache dans un fichier (via ob_start ... + file_put_content), de part ce faite, je ne fait pas de requête BDD pour récupérer les offres/profils (sauf après expiration).
    Memcached étant plus rapide, est-ce pertinent de remplacer le cache fichier par l'utilisation de memcached ?


    Avez-vous également des conseils d'utilisation de memcached, par exemple des bonnes pratiques d'utilisation, des choses à ne surtout pas faire ou autre...


    Merci d'avance pour vos réponses.

    Bonne journée,
    Geoffrey.

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    J'ai actuellement toutes mes pages d'offres d'emploi et de profils qui sont en cache dans un fichier (via ob_start ... + file_put_content), de part ce faite, je ne fait pas de requête BDD pour récupérer les offres/profils (sauf après expiration).
    Memcached étant plus rapide, est-ce pertinent de remplacer le cache fichier par l'utilisation de memcached ?
    Oui! On peut d'ailleurs se poser des questions sur la pertinence d'utiliser des fichiers comme cache de cette manière au lieu d'utiliser une base de données: une bdd est quand même conçue spécialement pour stocker des données et est particulièrement optimisée comparée à des fichiers. Et une simple mise à jour de MySQL permet souvent d'avoir des bonds en matière de performances. Mais bon, je suppose que vous avez fait des benchmarks avant de faire ça.

    Avez-vous également des conseils d'utilisation de memcached, par exemple des bonnes pratiques d'utilisation, des choses à ne surtout pas faire ou autre...
    Je ne connais pas particulièrement le memcached de 2016 (j'utilise redis), mais il y a les mêmes trucs auxquels on doit faire attention lorsqu'on utilise des caches:
    - invalidation (bien vérifier si les données sont toujours à jour avant de les récupérer)
    - les insertions parallèles et les transactions
    - la bonne quantité de mémoire et fragmentation.

    Il y a beaucoup de document sur Memcached sur le net de toutes façon pour t'aider.

  3. #3
    Membre émérite Avatar de Geoffrey74
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2007
    Messages : 515
    Par défaut
    Citation Envoyé par Tsilefy Voir le message
    Oui! On peut d'ailleurs se poser des questions sur la pertinence d'utiliser des fichiers comme cache de cette manière au lieu d'utiliser une base de données: une bdd est quand même conçue spécialement pour stocker des données et est particulièrement optimisée comparée à des fichiers. Et une simple mise à jour de MySQL permet souvent d'avoir des bonds en matière de performances. Mais bon, je suppose que vous avez fait des benchmarks avant de faire ça.
    Le gain en temps est effectivement négligeable, mais je suis confronté à une limite de connexions bdd simultanées, c'est surtout pour cela que je souhaite limiter les requêtes bdd récurrentes.
    Merci pour cette réponse, sur les derniers essais que j'ai fais, j'ai un gain de temps de 30% en passant par memcached, c'est quand même énorme, j'ai effectivement tout intérêt à passer sur ce système.

    Citation Envoyé par Tsilefy Voir le message
    - invalidation (bien vérifier si les données sont toujours à jour avant de les récupérer)
    Les données sont supprimées à chaque modification et j'ai mis une date d'expiration de 8h, cela te semble-t-il correcte ?
    Existe-t-il un risque que les données en mémoire soit altérées ? Si oui, comment puis-je le savoir ? (taille occupé, checksum ?

    Citation Envoyé par Tsilefy Voir le message
    - les insertions parallèles et les transactions
    Est-ce possible de me donner plus de détails à ce niveau? Je ne suis pas sûre de bien comprendre.

    Citation Envoyé par Tsilefy Voir le message
    - la bonne quantité de mémoire et fragmentation.
    Pour la quantité de mémoire j'ai 256Mb de disponible, sans pouvoir la modifier, et je suis limiter à une taille de 1Mo / donnée.
    Pour la fragmentation, qu'est-ce que c'est ?

    Merci en tout cas pour tes réponses.

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    Le gain en temps est effectivement négligeable, mais je suis confronté à une limite de connexions bdd simultanées, c'est surtout pour cela que je souhaite limiter les requêtes bdd récurrentes.
    Ça pourrait se résoudre aussi en optimisant la base de données. Si tu as aussi la possibilité de passer à un disque SSD, n'hésite pas: le gain sera aussi extraordinaire (que ce soit pour des fichiers ou pour la BDD).

    Les données sont supprimées à chaque modification et j'ai mis une date d'expiration de 8h, cela te semble-t-il correcte ?
    Ça me semble parfait.
    les insertions parallèles et les transactions
    C'est comme pour une BDD: il faut prévoir les cas où tu as deux utilisateurs qui font deux modifications en même temps sur les mêmes données, ou si les données sont modifiées entre le moment où un utilisateur consulte les données et fait une action sur ces données. À toi de voir si c'est important ou pas dans ton application. Ex simpliste: si tu as une petite annonce avec un prix à 100 €. Alors que le visiteur regarde l'annonce, le prix est augmenté par le vendeur à 120 €. Le visiteur clique "acheter" croyant payer 100 € et se retrouve facturé 120 €.

    Pour la fragmentation, qu'est-ce que c'est ?
    Là on entre dans des questions spécifiques à Memcached que je n'utilise pas, donc je ne peux pas répondre précisément, mais il semblerait que la mémoire gérée par memcached se fragmente considérablement si la taille des données en cache a tendance à beaucoup varier.

  5. #5
    Membre émérite Avatar de Geoffrey74
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2007
    Messages : 515
    Par défaut
    Ok merci pour toutes tes réponses, cela m'aide à mieux comprendre.

    J'ai mis en place memcached sur mon site en dev, et j'ai un vrai gain de performance. J'ai encore beaucoup d'optimisation à faire mais c'est déjà un bon début.


    Merci en tout cas d'avoir pris le temps de me répondre.


    Bonne soirée.
    Geoffrey.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Généralités] [WD19] Conseils pour utiliser nativement une base SQL autre que HyperFile
    Par EriCstoFF dans le forum WinDev
    Réponses: 20
    Dernier message: 24/04/2014, 12h05
  2. [2.x] Conseil pour utiliser Symfony2 sans Doctrine2
    Par grinder59 dans le forum Symfony
    Réponses: 4
    Dernier message: 31/03/2014, 16h24
  3. demande de conseil pour utilisation de grep
    Par JoneZy dans le forum Linux
    Réponses: 2
    Dernier message: 01/11/2009, 12h11
  4. Réponses: 1
    Dernier message: 06/10/2009, 10h39
  5. Réponses: 3
    Dernier message: 24/12/2004, 12h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo