Cache Redis vs utilisation directe de la mémoire

142

Je n'ai pas encore utilisé Redis, mais j'en ai entendu parler et je prévois de l'essayer comme stockage de cache.

J'ai entendu Redis utiliser la mémoire comme base de données du cache, alors quelle est la différence si j'utilise une variable comme objet ou un type de données de dictionnaire pour stocker des données? comme:

var cache = {
    key: {

    },
    key: {

    }
    ...
}

Quel est l'avantage de Redis?

hh54188
la source

Réponses:

222

Redis est une distance serveur de structure de données. C'est certainement plus lent que de simplement stocker les données dans la mémoire locale (car cela implique des allers-retours de socket pour récupérer / stocker les données). Cependant, il apporte également quelques propriétés intéressantes:

  • Redis est accessible par tous les processus de vos applications, s'exécutant éventuellement sur plusieurs nœuds (ce que la mémoire locale ne peut pas réaliser).

  • Le stockage de la mémoire Redis est assez efficace et fait dans un processus séparé. Si l'application s'exécute sur une plateforme dont la mémoire est garbage collector (node.js, java, etc ...), elle permet de gérer un cache / stockage mémoire beaucoup plus grand. En pratique, les tas très volumineux ne fonctionnent pas bien avec les langages de récupération de place.

  • Redis peut conserver les données sur le disque si nécessaire.

  • Redis est un peu plus qu'un simple cache: il fournit diverses structures de données, diverses politiques d'éviction d'éléments, des files d'attente de blocage, pub / sub, atomicité, scripts Lua, etc ...

  • Redis peut répliquer son activité avec un mécanisme maître / esclave afin de mettre en œuvre la haute disponibilité.

Fondamentalement, si vous avez besoin que votre application évolue sur plusieurs nœuds partageant les mêmes données, quelque chose comme Redis (ou tout autre magasin de clés / valeurs distant) sera nécessaire.

Didier Spezia
la source
5
Votre dernier point donne surtout l'impression que des choses comme Rlite sont un peu inutiles - un magasin de dictionnaires serait tout aussi approprié dans la plupart des cas d'utilisation où vous avez un seul processus. Est-ce correct?
naught101
1
Oui. OMI l'intérêt de Rlite est assez limité.
Didier Spezia
merci pour ces conseils, donc Redis est super à l'échelle, mais je suppose que dans le cas d'une simple application de chat avec en moyenne 300 à 500 objets à récupérer en mémoire, la structure de données en mémoire fera très bien le travail, sinon plus rapidement, car cela sont peu nombreux?
Webwoman
2
@DidierSpezia very large heaps do not perform well with garbage collected languagespouvez-vous expliquer pourquoi?
roottraveller
1
@roottraveller, je crois que c'est parce que le processus de ramassage des ordures doit généralement interrompre l'exécution de votre application ("stop-the-world") pour libérer la mémoire du tas, et plus le tas est grand, plus cette interruption dure généralement.
Regorsmitz du
3

Actuellement, nous sommes plus attirés par l'architecture sans serveur où chaque requête peut aller vers un conteneur différent.Dans ce cas, les redis peuvent jouer un rôle très important.

Nous ne pouvons pas utiliser moins le cache simple sur le serveur car nous ne pouvons pas être sûrs que notre demande est servie dans le même conteneur où notre cache simple est stocké.

Dans ce cas, nous devons utiliser redis car il stocke le cache à un emplacement distant et nous pouvons accéder à ce même conteneur qui change dans l'architecture sans serveur.

Ashish Bainade
la source