14

Web アプリケーションのログ記録に Redis を使用することを考えています。ログをRedisキュー/リストにダンプし、スケジュールされたワーカーをディスクに書き込むことで、このアプローチを使用している人がいることをグーグルで調べました。

http://nosql.mypopescu.com/post/8652869828/another-redis-use-case-centralized-logging

Redis を直接使用してディスクに永続化しない理由を理解したいと思いますか? Redis が書き込む小さなサーバーを、データベースやアプリケーション サーバーから分離して割り当てた場合、Redis を使用してログを直接保持することは可能ですか?

また、日時、ユーザーなどで Redis をクエリする際にも助けが必要です。たとえば、各ログは次のようになります。

datetime=>2012-03-24 17:45:12
userid=>123
message=>test message
category=>my category

特定のカテゴリの特定のユーザーによって、日時の範囲内で結果を照会するにはどうすればよいですか?

ありがとう!

4

4 に答える 4

24

Redis はインメモリ データベースであることを覚えておく必要があります (データをディスクに永続化できる場合でも)。Redis に入れるデータは、メモリに収まる必要があります。

あなたが言及した記事の提案は、Redis を分散キューイング システムとして使用することに関するものです。ワーカー プロセスはアイテムをデキューしてディスクに書き込むため、Redis メモリにはそれほど多くのアイテムはありません。この設計には欠陥があります: ワーカー プロセスが十分な速さでデータをディスクに書き込めない場合、Redis のメモリ消費量が爆発的に増加するため、構成 (Redis maxmemory パラメータ) またはソフトウェア (挿入時にキューをトリミングするか空にする) によって制限する必要があります。キューがいっぱいの場合)。

Redis に書き込むすべてのデータは (Redis 自体によってディスクに永続化されていても) メモリに保持されるため、提案は実際には機能しません。

もう 1 つのポイントは、Redis にクエリを実行できないことです。Redis はリレーショナル データベースではなく、アドホック クエリ メカニズムをサポートせず、以前に定義されたアクセス パスを含むコマンドのみをサポートします。異なるパラメーターでデータを検索する場合は、可能なすべての検索を予測し、挿入時に関連するデータ構造 (セット、ソート済みセットなど) を構築する必要があります。

別のストア (MongoDB またはリレーショナル データベース) の方が、ユース ケースにより適している可能性があります。

于 2012-11-01T08:07:42.953 に答える