0

Redis のパブリッシュ/サブスクライブ機能を使用しています。したがって、サーバーは 10 個のアイテムを公開し、クライアントはそれらの 10 個のアイテムを取得します。

ただし、新しいクライアントがフィードを購読します。新しいアイテムだけでなく、以前の 10 個のアイテムも入手してもらいたいです。

Redis には、パブリッシュおよびサブスクライブ機能を使用してこれを行う方法がありますか? フィード履歴はデータベースのどこかに保存されていますか? これを行う簡単な方法はありますか?メッセージをリストに保存し、クライアントにリストを実行させる最良の方法はありますLRANGE my_list 0 10か?

4

3 に答える 3

7

データの別のアーカイブを保持し、イベントを両方に追加します。新しいクライアントは、リアルタイム イベントをサブスクライブしてキューに入れ、最初に発行されたイベントで最新になるまでアーカイブを読み取り、発行されたイベントに追いつくことができます。そうすれば、アーカイブ イベントとリアルタイム イベントを切り替えるときに、公開されたイベントを見逃すことはありません。

于 2012-09-01T23:47:56.870 に答える
2

いくつかの調査中にこれに出くわしました。古いことは承知していますが、Redis Streams のデータ構造を使用すると、永続的なメッセージングを実装するのはそれほど複雑ではないことを付け加えたいと思いました。

パブリッシャーはメッセージを Stream にパブリッシュし、サブスクライバーは最新のメッセージだけを取得します。また、ユーザー グループを作成して、メッセージを受信できるサブスクライバーの数を制限し、それらを確認済みとしてマークして重複処理を回避することもできます。これは、メッセージを 1 回だけ処理する必要があり、それを確認する方法が必要な場合に適しています。

于 2019-01-19T19:38:22.140 に答える
1

この種の目的のためにnodejsアプリを作成することになりました。私の場合、保存したいredisサーバーにユーザーデータが公開されました。nodejsアプリでredisチャネルにサブスクライブし、詳細をデータベースに保存しました。これまでmysqlとmongoで遊んでいました。教えてくださいこれに興味があり、コードをうまく貼り付けられない場合は、公開履歴を保存しようとすることにいくつかの類似点があります...

乾杯

于 2013-01-24T15:14:11.863 に答える