2011-09-06 1 views
3

Nous avons actuellement un cache de transparence qui utilise un contrôle de concurrence optimiste lors du remplissage du cache en cas d'absence de cache. Nous n'anticipons pas beaucoup de conflits, nous avons donc choisi d'utiliser un contrôle de concurrence optimiste. Je ne sais pas trop quoi faire quand nous avons vraiment un conflit.Comment résoudre un conflit dans un cache de transparence en utilisant un contrôle de concurrence optimiste?

Si nous manquons un cache, nous extrayons la ligne correspondante de la base de données, puis la mettons dans le cache pour référence ultérieure. Avant de le mettre dans le cache, nous nous assurons que la valeur de la clé du cache n'a pas changé depuis la lecture de la base de données initiale. Si c'est le cas, je penche actuellement pour invalider l'entrée de cache, juste pour être du bon côté, mais cela semble un peu inefficace. Y a-t-il de meilleures alternatives, qui sont toujours sûres? Pour l'anecdote, nous utilisons Redis pour notre cache-couche et MySQL pour notre back-store.

Répondre

1

Si les conflits sont rares, alors pourquoi ne pas simplement WATCH la clé à nouveau, générer à nouveau les données de cache, et essayer de remplir à nouveau Redis. Continuez à répéter ce processus jusqu'à ce que votre EXEC revienne enfin propre. Vous pouvez définir un nombre maximum de tentatives pour quelque chose de sain, et si cela est jamais dépassé, il suffit d'invalider le cache et d'en informer vos administrateurs. L'étape de notification semble importante parce que si votre verrou optimiste échoue plus que quelque chose comme 5 fois alors il y a probablement quelque chose de bizarre et vous devriez regarder de plus près.

Questions connexes