Redis conserve-t-il les données?

122

Je comprends que Redis sert toutes les données de la mémoire, mais persiste-t-il également lors du redémarrage du serveur, de sorte que lorsque le serveur redémarre, il lit en mémoire toutes les données du disque. Ou est-ce toujours un magasin vide qui sert uniquement à stocker des données pendant que les applications s'exécutent sans persistance?

Zuriar
la source
1
Je ne sais pas si j'ai bien compris votre question. Vous pouvez enregistrer l'instantané sur le disque et lire à partir de ce fichier, si vous ne le faites pas, votre base de données Redis sera vide lors du redémarrage.
Sefa

Réponses:

82

Je vous suggère de lire à ce sujet sur http://redis.io/topics/persistence . En gros, vous perdez la persistance garantie lorsque vous augmentez les performances en utilisant uniquement le stockage en mémoire. Imaginez un scénario dans lequel vous insérez dans la mémoire, mais avant que cela ne persiste, le disque perd de la puissance. Il y aura une perte de données.

Redis prend en charge les soi-disant «instantanés». Cela signifie qu'il fera une copie complète de ce qui est en mémoire à certains moments (par exemple, toutes les heures). Lorsque vous perdez de la puissance entre deux instantanés, vous perdrez les données du temps écoulé entre le dernier instantané et le crash (il n'est pas nécessaire qu'il s'agisse d'une panne de courant ..). Redis échange la sécurité des données contre la performance, comme le font la plupart des bases de données NoSQL.

La plupart des bases de données NoSQL suivent un concept de réplication entre plusieurs nœuds pour minimiser ce risque. Redis est plus considéré comme un cache rapide que comme une base de données garantissant la cohérence des données. Par conséquent, ses cas d'utilisation diffèrent généralement de ceux des bases de données réelles: vous pouvez, par exemple, stocker des sessions, des compteurs de performances ou tout ce qui s'y trouve avec des performances inégalées et aucune perte réelle en cas de panne. Mais le traitement des commandes / des historiques d'achat, etc., est considéré comme un travail pour les bases de données traditionnelles.

Manuel Arwed Schmidt
la source
1
Ce sera formidable si vous pouvez ajouter le comportement de persistance par défaut. Comme la réponse de @Leonid Beschastny.
yeya
40

Le serveur Redis enregistre de temps en temps toutes ses données sur le disque dur, offrant ainsi un certain niveau de persistance.

Il enregistre les données dans l'un des cas suivants:

  • automatiquement de temps en temps
  • lorsque vous appelez manuellement la BGSAVEcommande
  • quand redis s'arrête

Mais les données dans Redis ne sont pas vraiment persistantes, car:

  • le crash du processus redis signifie la perte de toutes les modifications depuis la dernière sauvegarde
  • BGSAVE l'opération ne peut être effectuée que si vous disposez de suffisamment de RAM libre (la quantité de RAM supplémentaire est égale à la taille de la base de données redis)

NB: les BGSAVE besoins en RAM sont un réel problème, car redis continue de fonctionner jusqu'à ce qu'il n'y ait plus de RAM à exécuter, mais il arrête d'enregistrer les données sur le disque dur beaucoup plus tôt (à environ 50% de la RAM).

Pour plus d'informations, consultez Persistance Redis .

Léonid Beschastny
la source
1
Depuis que cette réponse a été écrite, redis a introduit un modèle de persistance alternatif appelé AOF qui offre une persistance nettement plus élevée, mais présente d'autres inconvénients comme une utilisation plus élevée du disque et un démarrage plus lent du serveur.
Leonid Beschastny le
15

C'est une question de configuration. Vous pouvez avoir aucune persistance, partielle ou totale de vos données sur Redis. La meilleure décision sera guidée par les besoins techniques et commerciaux du projet.

Selon la documentation Redis sur la persistance, vous pouvez configurer votre instance pour enregistrer des données sur le disque de temps en temps ou sur chaque requête, en un mot. Ils fournissent deux stratégies / méthodes AOF et RDB (lisez la documentation pour voir les détails à ce sujet), vous pouvez utiliser chacune d'elle seule ou ensemble.

Si vous voulez un "SQL comme la persistance", ils ont dit:

L'indication générale est que vous devez utiliser les deux méthodes de persistance si vous voulez un degré de sécurité des données comparable à ce que PostgreSQL peut vous fournir.

Adailson De Castro
la source
7

La réponse est généralement oui , mais une réponse plus complète dépend vraiment du type de données que vous essayez de stocker. En général, la réponse courte la plus complète est:

  • Redis n'est pas la meilleure solution pour le stockage persistant car il est principalement axé sur les performances
  • Redis est vraiment plus adapté au stockage / mise en cache en mémoire fiable des données d' état actuel , en particulier pour permettre l'évolutivité en fournissant une source centrale pour les données utilisées sur plusieurs clients / serveurs

Cela dit, par défaut Redis va conserver des données instantanés à un intervalle périodique (apparemment , c'est toutes les 1 minute, mais je n'ai pas vérifié cela - cela est décrit par l'article ci - dessous, ce qui est une bonne intro de base):

http://qnimate.com/redis-permanent-storage/


TL; DR

À partir des documents officiels :

  • La persistance RDB [valeur par défaut] effectue des instantanés ponctuels de votre ensemble de données à des intervalles spécifiés.
  • La persistance AOF [doit être explicitement configurée] enregistre chaque opération d'écriture reçue par le serveur, qui sera rejouée au démarrage du serveur, en reconstruisant l'ensemble de données d'origine.

Redis doit être explicitement configuré pour la persistance AOF, si cela est nécessaire, ce qui entraînera une baisse des performances ainsi qu'une augmentation des journaux. Cela peut suffire pour une persistance relativement fiable d'une quantité limitée de flux de données.

Chris Halcrow
la source
5

Vous ne pouvez choisir aucune persistance, de meilleures performances mais toutes les données sont perdues lors de l'arrêt de Redis.

Redis a deux mécanismes de persistance: RDB et AOF.RDB utilise un snapshooting global de planificateur et AOF écrit la mise à jour dans un fichier journal apappend uniquement similaire à MySql.

Vous pouvez utiliser l'un d'entre eux ou les deux. Lorsque Redis redémarre, il construit les données à partir de la lecture du fichier RDB ou du fichier AOF.

songxin
la source