Autour de Laravel

Utiliser Redis avec deux sites en parallèle

  • Avatar de kabeda
    Membre depuis :
    10/10/2017
    Messages :
    16

    Bonjour,
    Notre société a commandé un site web à une entreprise spécialisée dans la création de sites web.
    A la livraison, nous avons constaté que le package, fait avec laravel 5.6, consistait en deux applications indépendantes qui, pour la partie backend gère la création/modification sur la base de données avec un cache inactif et, la partie frontend consiste à lire de la base de données et ne modifiait que le nombre de lectures des articles avec un cache actif.
    La partie frontend est notre site principal et le backend en sous-domaine.
    A notre grand dam, il ne nous a pas été possible de refuser ce travail vu que le résultat répondait aux conditions du cahier des charges et que ça "fonctionne".
    Notre problème réside dans la gestion du cache, le concepteur utilise un cache file. Ainsi, lorsqu'un article d'une certaine catégorie (table dans la base de données) est modifié, les clés dans le cache liés à cette catégorie sont normalement supprimées. Ce qui est le fonctionnement standard dans la gestion d'un cache.
    Seulement, pour une meilleure rapidité d'exécution, j'ai opté pour Redis comme cache. Mais je ne peux pas gérer les clés cache à partir du backend et je ne peux que vider tout le cache et, encore, uniquement avec une route de la partie frontend.

    Ma question est, est-ce qu'il y a un moyen de gérer le cache redis à partir de la partie backend sans l'activer?

    Une deuxième question : notre hébergement est partagé avec un autre site et nous partageons aussi Redis. Quelle est la config pour utiliser Redis sur les deux sites sans conflit?

  • Avatar de F.M.
    Membre depuis :
    10/07/2017
    Messages :
    109

    Salut,

    Pour ta deuxième question (Quelle est la config pour utiliser Redis sur les deux sites sans conflit?), le plus simple c'est de préfixer tes clés avec un identifiant unique par appli/site.

    Pour la première ce n'est pas très clair, si le dev a utilisé l'API laravel pour le cache tu peux switcher le driver de cache dans la config sans rien changer au code (programmation sur interface).
    Soit ton cache fonctionne, et le fait que ce soit en file sur le DD va pas te pénaliser outre mesure, surtout si t'as un bon hébergeur, soit le cache ne fonctionne pas, que ce soit du redis ou du file.
    Et ton cache sert en lecture pas en écriture, à moins que ton dev ait utilisé le cache comme système de gestion de base de données ?
    Mais as-tu une réelle expertise en interne ? A priori non si tu as commandé le site, donc peut-être faut-il rester prudent sur le constat ?

  • Avatar de pierrocknroll
    Membre depuis :
    12/08/2019
    Messages :
    8

    Pour ta deuxième question (Quelle est la config pour utiliser Redis sur les deux sites sans conflit?), le plus simple c'est de préfixer tes clés avec un identifiant unique par appli/site.

    Je n'aurai pas fait ainsi, sur Reddis il y a un système de 'database', tu mets un site sur l'une, l'autre site sur l'autre database. Il y a une clé de configuration sur Lavarel pour spécifier la database.

  • Avatar de kabeda
    Membre depuis :
    10/10/2017
    Messages :
    16

    Bonjour,
    Merci pour l'intérêt porté à ma question.
    Actuellement, vu que je ne peux pas gérer le cache à partir du backend, la seule solution que j'ai trouvé c'est de mettre en place une route dans ma partie frontend qui permet de vider entièrement le cache avec un appel à une fonction qui contient Artisan::call('cache:clear');

    Ce qui est assez draconien.

    F.M. switcher le cache en redis, c'st déjà fait, le cache fonctionne mais pour le nettoyage, je ne pas trouvé de meilleur moyen que celui dont je parle auparavant.
    Préfixer les clés, j'ai essayé aussi mais même souci pour nettoyer uniquement les clés préfixées.

    pierrocknroll, j'ai pensé à utiliser une autre database mais comme sur l'autre site hébergé, il n'y a pas moyen de connaître quelle est la database utilisée, difficile de choisir la sienne.

    J'ai déjà entendu parler de la solution de mettre en place une "multi-instance" de Redis, je fouille cette piste.

    Merci.

  • Avatar de kabeda
    Membre depuis :
    10/10/2017
    Messages :
    16

    Bonjour,
    Au lieu de la solution de "multi-instance", je crois avoir trouver une combinaison entre les préfixes et la database et comment accéder directement à Redis à partir du backend avec
    use Illuminate\Support\Facades\Redis;
    et
    les commandes d'accès direct à Redis.

    Il faudrait maintenant que je me mettes en contact avec le développeur pour voir comment il a programmé la gestion du cache.

  • Avatar de F.M.
    Membre depuis :
    10/07/2017
    Messages :
    109

    @pierrocknroll je te confirme que la solution la plus simple c'est de préfixer tes clés. Avec laravel t'as juste le fichier de config à modifier. (redis c'est un seul d, je sais pas si tu l'as beaucoup utilisé)

    @kabeda si je peux me permettre, et après avoir lu tes réponses, je pense que vous n'avez pas les compétences en interne pour gérer le problème (je dis ça sans aucune morgue). Prends aussi en compte que Redis est efficace s'il est chargé en RAM, donc tes ressources serveur doivent suivre.
    Ton nettoyage de clé, tu laisses ça au système de cache en définissant une TTL (time to live, durée de vie). Tu as vérifié la durée de vie de tes données en cache ?

  • Avatar de kabeda
    Membre depuis :
    10/10/2017
    Messages :
    16

    Bonjour,
    @F.M.
    Aucun problème pour ta remarque.
    Autrement, Il y a bien une gestion des TTL et je n'ai pas de problème la dessus.
    Le hic c'est que normalement lors de la modification d'un enregistrement, les clés liées au type d'enregistrement (articles, rubriques, auteurs..) doivent être purgées pour que la modification soit effective côté frontend sans attendre la fin de durée de vie. Le concepteur du site a prévu cela en "hard". Il a adopté une méthode qui gère les clés et tout le système du cache qui sont dans file mais pas si j'utilise un autre type de cache. Je rappelle que c'est un site web dont le côté admin est un autre site.
    Pour être plus précis, d'habitude le côté admin d'un site fait en laravel c'est des routes et des controlleurs... qui sont dans un même dossier mais dans ce cas, le côté admin c'est un autre dossier complet de laravel.
    C'est assez biscornu, je sais...

  • Avatar de F.M.
    Membre depuis :
    10/07/2017
    Messages :
    109

    Bonjour,

    Non non pas biscornu du coup, si ton appli (et ton cdc par la même) ne peut pas se permettre d'afficher des données périmées, il faut effectivement invalider les clés ou les mettre à jour lors d'une écriture.
    Mais j'ai un peu de mal à cerner l'origine du problème.
    Si j'interprète bien ton "codé en hard", le développeur n'a pas utilisé l'API Laravel et a codé directement sur des instances au lieu des interfaces (je sais pas quel est ton niveau en programmation du coup, c'est peut-être du chinois pour toi) ?

    Quand tu bascules ton cache par défaut dans la config de Laravel de file à redis ça ne fonctionne plus, alors que ça fonctionne bien avec la config laissée par le dev ?

Vous ne pouvez pas répondre à ce sujet.