2016-09-16 1 views
0

私は他の人が読むことができるテキストメッセージを投稿するWebアプリケーションを持っています。redisで並べ替えられたセットを使用するための代替データモデル(Django/Pythonプロジェクトの場合)

最新のmessage_idとポスターのuser_idのペア(後で処理するため)を保存する必要があります。私はredisバックエンドを使用して、並べ替えられたセットにこれらの最新の50ペアを保存することができることを認識しました:user_idを値に、message_idをスコアとして保存します。

今度はuser_idが繰り返されるので、NXフラグをtrueに設定する必要があります。これにより、the docsによれば、新しいメンバーが既存のものを更新するのではなく、ソートされたセットに確実に追加されます。これは、同じユーザーが複数回メッセージを投稿した場合、既存のメッセージを上書きするのではなく、新しいエントリがソートされたセットに追加されるためです。これにより、データは正常に保たれます。

私のアプリケーションではPythonが使用されていて、redis 2.8.4(使用しているバージョン)ではNXフラグが導入されていませんでした。

redisを使用して最新のmessage_iduser_idのペアを効率的に保存するには、どのような方法がありますか?お知らせ下さい。価値と私のために動作しませんスコアとしてソートセットでmessage_iduser_idスイッチング


。どうして?並べ替えられたセットが最新の50エントリしか保存しないようにするため、設定されたカーディナリティが50を超える場合はzremrangebyrankにする必要があります。user_idの代わりにがscoreの場合にのみ機能します。私はそれが理にかなったことを願う

答えて

1

まず、 "NX"フラグの意味を誤解していると思います。それはソートされたセットです - 異なるスコアで同じ値を持つことはできません。 "NX"フラグは、異なるスコアで値を再度追加しようとすると、既存の要素のスコアを変更しないことを保証します。

redisリストを使用する必要があります。

で、score_id(または直列化された):

のuser_id:あなただけのように値を追加する必要があり、その後http://redis.io/commands/lset

を使用します。http://redis.io/commands/lrangeは最後の50個の要素を読み取るために、時々

を使用します。 http://redis.io/commands/ltrimリストをトリミングします。

関連する問題