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 retardait les opérations d'écriture. J'ai un peu peur car les sessions doivent être en temps réel.
Quelqu'un at-il rencontré de tels problèmes?
Réponses:
Redis est parfait pour stocker des sessions. Toutes les opérations sont effectuées en mémoire, et les lectures et écritures seront donc rapides.
Le deuxième aspect est la persistance de l'état de session. Redis vous offre une grande flexibilité dans la manière dont vous souhaitez conserver l'état de 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 -
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.appendfsync everysec
. Cela donnera d'excellentes performances avec des garanties de données raisonnablesla source
Fondamentalement, il existe deux types principaux disponibles: les snapsnots asynchrones et
fsync()
. Ils sont appelés respectivement RDB et AOF. Plus d'informations sur les modes de persistance sur la page officielle .La gestion du signal du processus démonisé se synchronise sur le disque lorsqu'il reçoit un SIGTERM par exemple, de sorte que les données seront toujours là après un redémarrage. Je pense que le démon ou le système d'exploitation doit se bloquer avant de voir une corruption d'intégrité, même avec les paramètres par défaut (instantanés RDB).
Le paramètre AOF utilise un fichier Ajouter uniquement qui consigne les commandes reçues par le serveur et recrée la base de données à partir de zéro lors du démarrage à froid, à partir du fichier enregistré. La politique de synchronisation de disque par défaut est de vider une fois toutes les secondes (IIRC) mais peut être définie pour verrouiller et écrire sur chaque commande.
L'utilisation à la fois des instantanés et du journal incrémentiel semble offrir à la fois une approche à long terme qui ne me dérange pas si je manque quelques secondes de données avec un journal incrémentiel plus sécurisé, mais coûteux. Redis prend en charge le clustering prêt à l'emploi, de sorte que la réplication peut également être effectuée.
J'utilise moi-même le paramètre RDB par défaut et j'enregistre les instantanés sur un FTP distant. Je n'ai pas encore vu de panne ayant causé une perte de données. Une panne matérielle aiguë ou une panne de courant serait très probable, mais je suis hébergé sur un VPS. Mince chance que cela se produise :)
la source
Cette question concerne vraiment les sessions en temps réel, et semble avoir été soulevée en partie à cause d'un malentendu de l'expression `` opérations d'écriture retardée ''. Alors que les détails ont finalement été taquinés dans les commentaires, je voulais juste que ce soit super-duper clair. ..
Vous n'aurez aucun problème à implémenter des sessions en temps réel.
Redis est un en mémoire mémoire de valeur clé avec persistance en option sur le disque. Les «opérations d'écriture retardées» font référence aux écritures sur le disque , et non à 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 ce qui concerne la persistance (combien vous retardez les écritures) déterminera la limite supérieure de la quantité de données pouvant être perdue en cas de panne.
la source