2017-09-25 19 views
0

シナリオは次のとおりです。テストを実行するときに失敗した場合は、タイムスタンプを保存し、値をredisに設定し、最後に3つのタイムスタンプと値を取得します。プロジェクトヘッドに電子メール。Redis異なるスコアで同じ値を格納するデータ型

私はRedisのでソートZSETにスコアを追加するオフに考えていた:

zadd Health:TestName timestamp1 "Fail" 
zadd Health:TestName timestamp2 "Success" 
zadd Health:TestName timestamp3 "Fail" 
zadd Health:TestName timestamp4 "Fail" 
zadd Health:TestName timestamp5 "Fail" 

だから私は今、テストTestNameを実行する場合、それが失敗した場合、I get last three timestamps and values and check if all are Fail。すべてが失敗した場合は、電子メールを送信してください。しかし、Zaddは私が異なるスコアに同じ価値を加えることを許しません。このデータを格納するもう1つの方法は何でしょうか。

注。私はredisを使用する必要があります。メンバーをフェッチする場合すなわち、ここで

答えて

1

「トリック」のメンバーを一意にするためにあり、かつ最も簡単な方法は、結果とタイムスタンプを連結することである。:

zadd Health:TestName timestamp1 "Fail:timestamp1" 
zadd Health:TestName timestamp2 "Success:timestamp2" 
zadd Health:TestName timestamp3 "Fail:timestamp3" 
zadd Health:TestName timestamp4 "Fail:timestamp4" 
zadd Health:TestName timestamp5 "Fail:timestamp5" 

その後、単にサフィックスを無視します。

ヒント:RAMを節約するため、可能な限り短い文字列を使用してください。あなたのケースでは、 "失敗"と "成功"の代わりに0と1(または "F"と "S" ...)を使用するだけで、メンバーごとに9バイトを節約できます。余分に保存されたバイト(つまりFtimestamp1Stimestamp2など)を連結する場合は、コロン( ":")を削除することもできます。

関連する問題