web-dev-qa-db-ja.com

PHPアプリケーションにMySQLの代わりにRedisを使用する場合

私はRedisを見てきました。とても面白そうです。しかし、実用的な観点から、どのような場合にMySQLよりもRedisを使用したほうが良いでしょうか?

63
james.bcn

NoSQLとSQLの議論全体を無視すると、最善のアプローチはそれらを組み合わせることです。つまり、システムの一部(複雑な検索、トランザクション)にはMySQLを使用し、その他(パフォーマンス、カウンターなど)にはredisを使用します。

私の経験では、スケーラビリティ(多くのユーザー...)に関連するパフォーマンスの問題により、最終的に何らかの種類のキャッシュを追加してMySQLサーバーから負荷を取り除くことを余儀なくされ、redis/memcachedは非常に優れています。

79
Martin Wickman

私はRedisの専門家ではありませんが、私が集めたものから、両者はかなり異なっています。 Redis:

  • リレーショナルデータベースではありません(派手なデータ編成はありません)
  • すべてをメモリに保存します(高速でスペースが少なく、クラッシュした場合に安全性が低下します)
  • さまざまなWebホストにあまり広く展開されていない(自分でホストしていない場合)

MySQLが提供するリレーショナル構造を必要とせず、高速アクセスを必要とする少量のデータがある場合に、Redisを使用することをお勧めします。これは、たとえば、頻繁かつ高速にアクセスする必要がある動的なWebインターフェイスのセッションデータである可能性があります。

Redisは、非常に頻繁にアクセスされる(つまり、ユーザーがログインしたときにロードする)MySQLデータのキャッシュとしても使用できます。

あなたは間違った方法で質問をしていると思う、どのアプリケーションがシステムに適しているのではなく、どちらがアプリケーションに適しているかを自問するべきです;)

20
Thomas

MySQLはリレーショナルデータストアです。構成されている場合(たとえば innodb テーブルを使用)、MySQLは reliable データストアオファリング [〜#〜] acid [〜#〜] トランザクション。

RedisはNoSQLデータベースです。速度と信頼性を犠牲にしているため、(正しく使用した場合)より高速です(パフォーマンスを劇的に低下させるためfsyncで実行することはまれです)およびトランザクション(- [〜#〜] setnx [〜#〜])で近似できます。

Redisには、セット、リスト、ソート済みリストなど、非常に優れた機能がいくつかあります

Redisのこれらのスライド 統計の収集とセッション管理を例としてリストします。例としてredisで書かれたTwitter clone もありますが、それはTwitterがredisを使用することを意味するものではありません( Twitter use 重いmemcacheキャッシュを備えたMySQL)。

12
Will

MySql-

1)構造化データ2)ACID 3)大量のトランザクションとルックアップ。

Redis-

1)非構造化データ2)シンプルで迅速な検索。たとえば-セッションのトークン3)キャッシュレイヤーに使用します。

6
Preetham R U

Redis、SQL(+ NoSQL)には利点と欠点があり、多くの場合、並んで機能します。

  • Redis-ローカル変数は別のアプリケーションに移動しました
    • ローカル変数/プロトタイプからの移動が簡単
    • 永続的なストレージ
    • 複数のユーザー/アプリケーションはすべて同じデータを見る
    • 拡張性
    • フェイルオーバー
    • (-)データに対してより高度なクエリ/質問を行うのは難しい
  • NoSQL
    • 生データを「データベース」にダンプする
    • すべて/ほとんどのRedis機能
    • (-)SQLと比較して、高度なクエリを実行するのが難しい
  • SQL
    • データ間の高度なクエリ
    • すべて/ほとんどのRedis機能
    • (-)データを「スキーマ」に配置する必要がある(シート/ Excelを考える)
    • (-)Redis/NoSQLよりも単純な値の入出力が少し難しい

(異なるSQL/NoSQLソリューションは異なる場合があります。1つのシステムが同時にすべてを提供できない理由については、「CAP定理」と「ACID(コンピューターサイエンス)」をお読みください)

1
Punnerud

公式ウェブサイトによると、Redisはオープンソース(BSDライセンス)のインメモリデータ構造ストアであり、データベース、キャッシュ、メッセージブローカーとして使用されます。実際、Redisは高度なキーと値のストアです。毎秒約110000セット、毎秒約81000 GETを実行できるため、文字通り非常に高速で、驚くほど高いスループットを実現します。また、格納するデータタイプの非常に豊富なセットをサポートします。実際、Redisは毎回データをメモリ内に保持しますが、ディスク上の永続的なデータベースも保持しています。そのため、トレードオフがあります:データセットのサイズ制限(メモリごと)による驚異的な速度。この記事では、MySQLと比較してベンチマークを得るために、キャッシュエンジンとしてのみRedisを使用します。

ここを読む: Redis vs MySQL Benchmarks

0
Ayush Jain