0

Redis Store と GetRelatedEntities 呼び出しを使用して、userId をそのユーザーのグループに関連付けています。

サービス呼び出しでは、コストのかかるデータベース呼び出しを呼び出してグループを初めて取得する前に、グループがキャッシュに格納されたことがあるかどうかを確認したいと考えています (これはかなり標準的だと思います)。

その userId に対して StoreRelatedEntities が以前に呼び出されていない場合、GetRelatedEntities 呼び出しは空のリストを返します。ただし、空のリストは、ユーザーがグループを持っていないことを意味する可能性があるため、以前にそのユーザーに対してグループが設定されていないことを確認する方法が必要です。

2 つの状態を区別する方法はありますか?

ありがとう

4

1 に答える 1

0

Redis の空のコレクションと存在しないコレクションを区別する方法はありません。Redis はコレクションに要素がなく、存在しないコレクションまたは空のコレクションをクエリする動作が常にコレクションを自動的に削除するためです。つまり、空のコレクションを返します。

StoreRelatedEntities を呼び出すたびにキャッシュを持つ userIds のカスタム セットを維持することをお勧めします。

redis.AddItemToSet("userGroupsCache", user.Id);
redis.As<User>().StoreRelatedEntites(user.Id, groups);

次に、キャッシュされているかどうかに関係なく、セットをクエリできます。たとえば、次のようになります。

var userCacheExists = redis.SetContainsItem("userGroupsCache", user.Id);
于 2014-09-19T13:12:36.663 に答える