pub/sub を行うために redis を検討しています。redis-cli を使用してチャンネルをサブスクライブし、パブリッシュされたものをファイルにダンプするスクリプトを書きたかったのです。ただし、 redis-cli subscripe channel > output がうまく機能しないことに気付きました。
助けていただければ幸いです。
よろしく、カシャップ
pub/sub を行うために redis を検討しています。redis-cli を使用してチャンネルをサブスクライブし、パブリッシュされたものをファイルにダンプするスクリプトを書きたかったのです。ただし、 redis-cli subscripe channel > output がうまく機能しないことに気付きました。
助けていただければ幸いです。
よろしく、カシャップ
これは、redis-cli がサブスクリプションに関連付けられたメッセージを表示するときに stdout の自動フラッシュがないためです。そのため、redis-cli を停止する前の最後のメッセージは出力ファイルに表示されません。
体系的なフラッシュを強制するために使用できるオプションはありません。redis-cli.c にパッチを適用する必要があります。Redis ソース コードで、src/redis-cli.c を編集し、次のコードを見つけます。欠落している fflush 行を追加します。
if (config.pubsub_mode) {
if (config.output != OUTPUT_RAW)
printf("Reading messages... (press Ctrl-C to quit)\n");
while (1) {
if (cliReadReply(output_raw) != REDIS_OK) exit(1);
// The following line must be added
fflush(stdout);
}
}
redis-cli が再度コンパイルされると、期待どおりに動作するはずです。