0

我正在使用 Redis Store 和 GetRelatedEntities 调用将 userId 与该用户的组相关联。

在服务调用中,我想在调用昂贵的数据库调用第一次获取组之前查看组是否已存储到缓存中(我认为这是非常标准的)

如果之前未针对该 userId 调用 StoreRelatedEntities,则 GetRelatedEntities 调用将返回一个空列表。但是,空列表可能意味着用户没有任何组,因此我需要一种方法来确定之前没有为该用户设置组。

有什么办法可以区分这两种状态吗?

谢谢

4

1 回答 1

0

无论如何,没有办法区分 Redis 中的空集合和不存在的集合,因为 Redis 会在集合没有任何元素时自动删除集合,并且查询不存在或为空的集合的行为是同样,即它返回一个空集合。

我建议在调用 StoreRelatedEntities 时维护一组具有缓存的自定义 userId,例如:

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 回答