web-dev-qa-db-fra.com

Memcache vs Java Memory

Question simple, probablement stupide: supposons que j'ai un Java qui stocke en mémoire les clés et les valeurs couramment utilisées que je peux interroger (disons dans un HashMap)

Quelle est la différence entre cela et l'utilisation de Memcache (ou même de Redis)? Ils stockent tous les deux des choses en mémoire. Y a-t-il un avantage pour l'un ou pour l'autre? Memcache laisse-t-il moins d'espace mémoire? Peut stocker plus dans moins de mémoire? Plus rapide à interroger? Aucune différence?

53
Henley Chiu

Avantages de Java mémoire sur memcache:

  1. La mémoire Java est plus rapide (pas de réseau).
  2. La mémoire Java ne nécessite pas de sérialisation, vous avez Java objets à votre disposition.

Avantages de memcache sur Java mémoire:

  1. Il peut être consulté par plusieurs serveurs d'applications, de sorte que votre cache sera partagé entre tous vos serveurs d'applications.
  2. Il peut être consulté par une variété de serveurs différents, à condition qu'ils soient tous d'accord sur le schéma de clé et la sérialisation.
  3. Il supprimera les valeurs de cache expirées, vous obtiendrez ainsi une invalidation basée sur le temps.
49
Ned Batchelder

Je viens de faire un benchmark entre une carte de hachage simultanée, memcached et MySQL.

HashMap vs. memcached vs. MySQL

Voici les résultats:

Type Insérer recherche Supprimer

ConcurrentHashMap 264ms 93ms 82ms

Memcached 6549ms 5976ms 4900ms

Mysql 55754ms 26002ms 57899ms

Un pool de threads a été utilisé pour ce test.

Vous trouverez plus d'informations ici: http://www.incentergy.de/2013/12/big-data-architecture-patterns-for-performance/

De plus, le cache suivant peut être une alternative à memcached: https://code.google.com/p/kitty-cache/

27
Manuel_B

Cela dépend de ce que vous voulez. Une carte en mémoire sera plus rapide; l'expiration des données n'est pas vraiment un problème (voir: Google Guava MapMaker , qui peut créer une carte qui expire les entrées après les lectures et/ou les écritures, et n'oublions pas des choses comme OSCache = et EHCache , sans parler de choses distribuées comme GigaSpaces XAP ou Coherence ).

Les projets de mise en cache (XAP, OSCache, EhCache, Coherence, etc.) peuvent distribuer des entrées de cache, vous obtenez donc un partage naturel et d'autres fonctionnalités; La cohérence peut gérer les transactions et l'écriture, et XAP est en fait conçu pour servir de système d'enregistrement (où l'écriture est synchronisée et répliquée, de sorte que vous utilisez une grille de données en mémoire comme mécanisme de stockage de données réel plutôt que en utilisant une base de données.)

Memcached est ... eh bien, vous pouvez accéder à une instance de serveur memcached à partir d'une série de machines. Memcached en tant qu'API est simplement un magasin de clés/valeurs, et la distribution est entièrement effectuée côté client. Il a certainement les bases, je suppose, et il y a certainement des API en plusieurs langues, mais c'est vraiment assez mou sinon.

(BTW, GigaSpaces a une couche Memcached, donc vous pourriez utiliser théoriquement memcached comme système d'enregistrement ...)

16
Joseph Ottinger