2017-07-31 2 views
1

現在MySQLを使用している私のアプリケーションは、ダイヤル番号と発信者IDに関する情報をDBから取得します。私はRedisで定義されている発信者IDのリストをグループにまとめたいと思っています。たとえば、10の発信者IDを考えてみましょう。しかし、それぞれのダイヤルでは、乱数だけでなく、redisサーバーから発信者IDを選択/取得したいと考えています。それはレディスで可能ですか?これは、すべての鍵に公平な機会が与えられていることを確認するために、キーのリストからのロードバランシングのようなものです。Redis経由でGETを使用してKEYをロードバランシング

データセットの例は、キーとなる電話帳になり、その電話帳には10の電話番号が表示されます。電話番号帳のすべての番号がダイヤルに均等に使用されるように、すべての固有のダイヤルにこれらの番号を使用したいと思います。

テーブルで更新フィールドを設定することで、MySQLでこれを行うことができますが、これはMySQLでUPDATEを増やす予定です。これは、レディスで簡単に行うことができますか?私はそれを行う方法の論理を考えるように見えることはできません。

ありがとうございました。

答えて

3

Redisの中でそれを行うには2つの方法があります。

ZSET

あなたはZSETエントリのスコアで使用頻度を追跡することができます。だから、レディスから一番低いスコアのものを取ってきたら、そのスコアを1つ増やします。

利点は、各要素が何回使用されたかを正確に確認できることです。

LISTは

あなたは数字に使用状況を追跡については気にしていない場合。あなたはRedisリストでそれを行うこともできます。ラウンドロビンのロードバランシングを実現するには、/から自分自身にRPOPLPUSH source destinationを使用してください。基本的には、要素を一番下から取り出し、キューの先頭に戻し、シャッフルされた要素の値を返します。

実行するコマンドは1つだけあり、操作はアトミックです。

関連する問題