このユースケースにはredisのセットを使用できます:
タイムスロットが常に15分の倍数である場合は、次のように実行できます。
1)すべてのタイムスロットを含むユニバーサルセットを用意します。ここでは15の倍数です。
sadd universal 08:00 08:15 08:30 08:45 09:00 ...
2)チームのメンバーごとに、予約されたスロット用に個別のセットがあります。メンバー1の場合08:15-08:50 09:00まで彼を婚約させる必要があります 。
sadd member_1 08:15 08:30 08:45 09:00
3)他のメンバーも同様です。 member2 08:30-09:30
sadd member_2 08:30 08:45 09:00 09:30
4)これで、メンバーごとに、
を使用して空きスロットを取得できます。sdiff universal member_1
5)スロット全体に空きがあります。 2つの操作を行う必要があります。
result = sinter member_1 member_2 ...
sdiff universal result
すべてのメンバーのセットを交差させると、すべてのユーザーが忙しいタイムスロットが得られます。したがって、これらのスロットを割り当てることはできません。
ユニバーサルセットを使用して減算(差分)操作を実行すると、スロット全体を自由に使用できるようになります。
お役に立てれば。