2017-04-06 17 views
0

ユーザー、ノード、ソケット(すべての文字列ID)を含む3つのエンティティをモデル化するために、Redisで構造を構築する必要があります。 例えば、ユーザU1は、ソケットS1およびS2によってノードN1に接続することができるが、ソケットS3およびS4によってノードN2に接続することもできる。Redisで参照セットを実装する

特定のユーザーのノードに接続されているソケットを、接続または切断する際に簡単に更新できる必要があります。 また、何も処理が行われない場合は、一定の時間が経過すると各ソケットが期限切れになる必要があります。 いつでも、ユーザーが(ノードとは独立して)少なくとも1つのソケットに接続されているかどうかを知る必要があります。

私は2種類のセット(クラスタにハッシュタグを使用しました)を使って問題をモデル化しました: 1-キー{u:U1} skt:NXを持つセット。ユーザU1 2つのキー{u:U1} sktsを含むセット。たとえば、 "{u:U1} skt:N1"、 "{u:U1} skt:N2"、...

この構成では、メンバーを追加または削除することでsets {u:U1} skt:NXを簡単に更新できます。また、次のluaスクリプトを使用して、ノードに関係なくユーザーがソケットに接続されているかどうかを確認できます。

local indexes = redis.call("smembers", KEYS[1]) 
return redis.call("sunion", unpack(indexes)) 

これは正しいアプローチですか?セットのメンバーの期限切れ時間を実装するにはどうすればよいですか?

答えて

0

レディスは、データ構造のコンテンツの有効期限が切れていません。 Setsで有効期限を実装する一般的なパターンは、ソートされたセットを代わりに使用し、要素のスコアにタイムスタンプまたはバージョン値を格納することです。有効期限が切れると、スコアが十分に低いメンバーを削除するという単純な問題になります(ZREMBYSCOREコマンド)。

関連する問題