web-dev-qa-db-fra.com

Quelle est la différence entre le cache et la mémorisation?

J'aimerais savoir quelle est la différence réelle entre la mise en cache et la mémorisation. Selon moi, les deux impliquent d'éviter les appels de fonction répétés pour obtenir des données en les stockant.

Quelle est la différence entre les deux?

85
John

La mémorisation est une forme spécifique de mise en cache qui implique la mise en cache de la valeur de retour d'une fonction en fonction de ses paramètres.

La mise en cache est un terme plus général. Par exemple, la mise en cache HTTP est une mise en cache mais pas une mémorisation.

Wikipedia dit :

Bien que liée à la mise en cache, la mémorisation se rapporte à un cas spécifique de cette optimisation, la distinguant des formes de mise en cache telles que la mise en mémoire tampon ou le remplacement de page. 

85
SLaks

Comme je les ai vus utilisés, "mémoization" est "la mise en cache du résultat d'une fonction déterministe" qui peut être reproduite à tout moment avec la même fonction et les mêmes entrées.

La "mise en cache" comprend essentiellement toute stratégie de mise en mémoire tampon de sortie, que la valeur source soit ou non reproductible à un moment donné. En fait, la mise en cache est également utilisée pour faire référence aux stratégies input buffering, telles que le cache en écriture sur un disque ou en mémoire. C'est donc un terme beaucoup plus général.

34
harpo

Je pense que la mise en cache des termes est généralement utilisée lorsque vous stockez les résultats d'opérations IO ou, fondamentalement, toutes les données qui vous parviennent de l'extérieur (fichiers, réseau, requêtes Db). La mémoisation des termes s'applique généralement au stockage des résultats de vos propres calculs, par exemple dans le contexte de la programmation dynamique.

6
MK.

La mémorisation est une forme spéciale de mise en cache du résultat d'une fonction déterministe. Cela signifie que la mise en cache du résultat en dehors de la fonction n’est pas une mémorisation, car la fonction devrait muter le cache lors du calcul d’un nouveau résultat (pas déjà dans le cache) pour que ce ne soit plus une fonction (pure). La mémorisation implique généralement de transmettre le cache en tant qu'argument supplémentaire (dans une fonction d'assistance). La mémorisation optimisera les fonctions qui doivent calculer des valeurs plusieurs fois pour un seul accès. La mise en cache optimisera les fonctions appelées plusieurs fois avec les mêmes paramètres. En d'autres termes, la mémorisation optimisera le premier accès, que la mise en cache optimise uniquement les accès récurrents. 

1

Je voudrais ajouter aux autres bonnes réponses que memoization est également connu sous le nom de tabling . Je pense qu'il est également important de connaître ce terme pour ceux qui apprennent ce que sont la mémorisation et la mise en cache. 

0
Vadim S.