web-dev-qa-db-fra.com

Est-il sécuritaire de stocker des sessions avec Redis?

J'utilise actuellement MySql pour stocker mes sessions. Cela fonctionne très bien, mais c'est un peu lent.

On m'a demandé d'utiliser Redis, mais je me demande si c'est une bonne idée, car j'ai entendu dire que Redis retarde les opérations d'écriture. J'ai un peu peur parce que les sessions doivent être en temps réel.

Quelqu'un at-il rencontré de tels problèmes?

83
Trent

Redis est parfait pour stocker des sessions. Toutes les opérations sont effectuées en mémoire, les lectures et les écritures sont rapides.

Le deuxième aspect est la persistance de l'état de la session. Redis vous offre une grande flexibilité quant à la manière de conserver l’état de la session sur votre disque dur. Vous pouvez passer par http://redis.io/topics/persistence pour en savoir plus, mais à un niveau élevé, voici vos options -

  1. Si vous ne pouvez vous permettre de perdre aucune session, définissez appendfsync always dans votre fichier de configuration. Avec cela, Redis garantit que toutes les opérations d'écriture sont enregistrées sur le disque. L'inconvénient est que les opérations d'écriture seront plus lentes.
  2. Si vous êtes prêt à perdre environ 1s de données, utilisez appendfsync everysec. Cela donnera de grandes performances avec des garanties de données raisonnables
136
Sripathi Krishnan

Il existe essentiellement deux types principaux disponibles: les snapsnots asynchrones et fsync(). Ils s'appellent respectivement RDB et AOF. Plus sur modes de persistance sur la page officielle .

Le traitement du signal du processus démonisé se synchronise sur le disque lorsqu'il reçoit un SIGTERM, par exemple, afin que les données soient toujours là après un redémarrage. Je pense que le démon ou le système d'exploitation doit tomber en panne avant que vous ne voyiez une corruption liée à l'intégrité, même avec les paramètres par défaut (instantanés de la base de données relationnelle).

Le paramètre AOF utilise un fichier uniquement en annexe qui enregistre les commandes reçues par le serveur et recrée la base de données à partir du début lors du démarrage à froid, à partir du fichier enregistré. La stratégie de synchronisation de disque par défaut consiste à vider toutes les secondes (IIRC), mais peut être configurée pour verrouiller et écrire sur chaque commande.

L’utilisation à la fois des instantanés et du journal incrémental semble offrir à la fois une approche à long terme ne pas déranger-si-je-rate-quelques-secondes-de-données avec une approche plus sécurisée , mais journal incrémental coûteux. Redis prend en charge la mise en cluster immédiate, de sorte que la réplication peut également être effectuée, semble-t-il.

J'utilise moi-même le paramètre de base de données relationnelle par défaut et je sauvegarde les instantanés sur un FTP distant. Je n'ai pas encore vu de panne causant une perte de données. Une panne matérielle aiguë ou des coupures de courant est très probable, mais je suis hébergé sur un VPS. Chance faible que cela se produise :)

14
Morten Jensen

Cette question concerne en réalité les sessions en temps réel, et semble avoir été soulevée en partie à cause d'une incompréhension de l'expression "opérations d'écriture différée". finalement taquiné dans les commentaires, je voulais juste le rendre clair super-duper ...

Vous n'aurez aucun problème à mettre en œuvre des sessions en temps réel.

Redis est un magasin en mémoire en mémoire avec persistance facultative sur le disque. "Opérations d'écriture différée" fait référence à écrit sur le disque , pas à la base de données en général, qui existe en mémoire. Si vous définissez une paire clé/valeur, vous pouvez l’obtenir immédiatement (c'est-à-dire en temps réel). La politique que vous sélectionnez en matière de persistance (combien de temps vous retardez les écritures) déterminera la limite supérieure pour combien de données pourraient être perdues dans un crash.

6
Jordan Dodson