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?