Je voudrais savoir quelle serait une meilleure approche pour invalider / mettre à jour des objets de cache.
Conditions préalables
- Avoir un serveur memcached distant (servant de cache pour plusieurs applications)
- Tous les serveurs sont hébergés par azure (régions d'affinité, mêmes centres de données)
- La taille des objets de cache varie de 200 octets à 50 kilo-octets
Approche 1 (stocker dans le cache dès que possible)
- L'objet A est créé -> stocker dans la base de données et stocker dans le cache
- Objet A demandé par le client -> vérifier l'existence du cache, sinon extraire de la base de données et stocker dans le cache
- L'objet A est mis à jour -> stocker dans la base de données, stocker dans le cache
L'approche 1 semble être plus simple. Si quelque chose est créé, mettez-le dans le cache dès que possible. Indépendamment de quelqu'un en aura besoin.
Approche 2 (magasin de cache paresseux)
- L'objet A est créé -> stocker dans la base de données
- Objet A demandé par le client -> vérifier l'existence du cache, sinon extraire de la base de données et stocker dans le cache
- L'objet A est mis à jour -> stocker dans la base de données, supprimer la clé dans le cache
L'approche 2 semble être plus sensible à la mémoire. Dans cette approche, seuls les éléments demandés sont mis en cache.
Question 1: Dans l'esprit de la performance, quelle serait une meilleure approche? La mémoire ni le CPU ne comptent pas encore.
Question 2: Mes pensées sont-elles une sorte d'optimisation prématurée?
Question 3: D' autres réflexions? D'autres approches?
performance
azure
memcached
caching
lurkerbelow
la source
la source
memcached gère les objets avec sa propre stratégie, laquelle objet mis en cache expirera si personne n'y accède ou si memcached manque de mémoire. Par conséquent, votre première approche n'est pas une bonne idée car votre objet dans memcached continuerait à être invalidé en raison d'une mémoire insuffisante lorsque vous créez des objets.
Q1. L'approche 2 serait meilleure en termes de performances car elle n'envoie pas d'objet à memcached, bien que l'amélioration des performances soit très faible.
Q2. C'est dur à dire. Supposons que vous connaissiez le goulot d'étranglement et rédigez les approches, ce ne serait pas prématuré.
Q3. Il existe d'autres approches telles que le cache dans memcached uniquement.
la source