web-dev-qa-db-fra.com

Quand utiliser Redis au lieu de MySQL pour les applications PHP?

J'ai regardé Redis. Ça a l'air très intéressant. Mais d'un point de vue pratique, dans quels cas serait-il préférable d'utiliser Redis sur MySQL?

63
james.bcn

Ignorant tout le débat NoSQL vs SQL, je pense que la meilleure approche est de les combiner. En d'autres termes, utilisez MySQL pour certaines parties du système (recherches complexes, transactions) et redis pour d'autres (performances, compteurs, etc.).

D'après mon expérience, les problèmes de performances liés à l'évolutivité (beaucoup d'utilisateurs ...) vous obligent finalement à ajouter une sorte de cache pour supprimer la charge du serveur MySQL et redis/memcached est très bon à cela.

79
Martin Wickman

Je ne suis pas un expert de Redis, mais d'après ce que j'ai rassemblé, les deux sont assez différents. Redis:

  • N'est pas une base de données relationnelle (pas d'organisation de données fantaisie)
  • Stocke tout en mémoire (plus rapide, moins d'espace, probablement moins sûr en cas de crash)
  • Est moins largement déployé sur divers hébergeurs (si vous ne vous hébergez pas)

Je pense que vous voudrez peut-être utiliser Redis lorsque vous avez une petite quantité de données qui n'a pas besoin de la structure relationnelle qu'offre MySQL et nécessite un accès rapide. Il peut par exemple s'agir de données de session dans une interface Web dynamique auxquelles il faut accéder souvent et rapidement.

Redis pourrait également être utilisé comme cache pour certaines données MySQL qui seront consultées très souvent (c'est-à-dire: le charger lorsqu'un utilisateur se connecte).

Je pense que vous posez la question dans le mauvais sens, vous devriez vous demander laquelle est la plus adaptée à une application, plutôt que quelle application est adaptée à un système;)

20
Thomas

MySQL est un magasin de données relationnelles. S'il est configuré (par exemple en utilisant innodb tables), MySQL est une offre de stockage de données fiable [~ # ~] acide [~ # ~] transactions.

Redis est une base de données NoSQL. Il est plus rapide ( s'il est utilisé correctement) car il échange vitesse et fiabilité ( il est rare de fonctionner avec fsync car cela nuit considérablement aux performances) et aux transactions (= qui peut être approximé - lentement - avec SETNX ).

Redis a quelques fonctionnalités très soignées comme les ensembles, les listes et les listes triées.

Ces diapositives sur Redis listent la collecte de statistiques et la gestion de session comme exemples. Il y a aussi un Twitter clone écrit avec redis à titre d'exemple, mais cela ne signifie pas que Twitter utilise redis ( tilisation de Twitter MySQL avec une forte mise en cache memcache).

12
Will

MySql -

1) Données structurées 2) ACID 3) Transactions et recherches lourdes.

Redis -

1) Données non structurées 2) Recherches simples et rapides. par exemple - jeton d'une session 3) l'utiliser pour la mise en cache de la couche.

6
Preetham R U

Redis, SQL (+ NoSQL) ont leurs avantages + inconvénients et vivent souvent côte à côte:

  • Redis - Variables locales déplacées vers une application distincte
    • Facile à déplacer des variables locales/prototype
    • Storrage persistant
    • Plusieurs utilisateurs/applications voient tous les mêmes données
    • Évolutivité
    • Basculement
    • (-) Difficile de faire des requêtes/questions plus avancées sur les données
  • NoSQL
    • Vider les données brutes dans la "base de données"
    • Toutes/la plupart des fonctionnalités de Redis
    • (-) Plus difficile à faire des requêtes avancées, par rapport à SQL
  • SQL
    • Requêtes avancées entre les données
    • Toutes/la plupart des fonctionnalités de Redis
    • (-) Besoin de placer les données dans un "schéma" (fiche de réflexion/Excel)
    • (-) Un peu plus difficile d'obtenir des valeurs simples d'entrée/sortie que Redis/NoSQL

(les différentes solutions SQL/NoSQL peuvent varier. Vous devriez lire sur 'Théorème CAP' et 'ACID (informatique)' pourquoi un système ne peut pas tout vous donner simultanément)

1
Punnerud

Selon le site officiel, Redis est un open source (licence BSD), un magasin de structure de données en mémoire, utilisé comme base de données, cache et courtier de messages. En fait, Redis est un magasin de valeurs-clés avancé. Il est littéralement super rapide avec un débit incroyablement élevé car il peut effectuer environ 110000 SETs par seconde, environ 81000 GETs par seconde. Il prend également en charge un ensemble très riche de types de données à stocker. En fait, Redis conserve les données en mémoire à chaque fois mais également une base de données persistante sur disque. Ainsi, il est livré avec un compromis: vitesse incroyable avec la taille limite sur les jeux de données (selon la mémoire). Dans cet article, pour avoir des repères par rapport à MySQL, nous utiliserions Redis uniquement comme moteur de mise en cache.

Lire ici: Redis vs MySQL Benchmarks

0
Ayush Jain