我的团队决定通过 ServiceStack.net Redis Client 使用 Redis 作为我们正在开发的新的大容量网站的底层存储库。我不确定在哪里可以找到有关此问题的文档(一般 Redis 文档或特定 ServiceStack.Net 文档或两者兼有) - 实际上是否有关于如何通过 ServiceStack.Net 实现 Redis 的文档的明确来源,其中包括您需要了解 Redis 概念和 ServiceStack.Net 概念的所有内容,还是我们需要分别整合这两个方面的文档才能全面了解?
我只是在努力解决如何在我们模型的对象图中准确存储相关对象。这是我想要使用的一个简单场景:
系统中有两个对象:User
和Feed
。在 RDBMS 术语中,这两个对象具有一对多的关系,即 aUser
有一个Feed
对象集合,而一个 feed 只能属于一个User
。提要总是通过其用户从 Redis 访问,但有时我们希望通过提要实例访问用户。
所以我的问题是我们应该将相关对象存储为属性还是应该存储Id
相关对象的值?为了显示:
方法一:
public class User
{
public User()
{
Feeds = new List<Feed>();
}
public int Id { get; set; }
public List<Feed> Feeds { get; set; }
// Other properties
}
public class Feed
{
public long Id { get; set; }
public User User { get; set; }
}
方法 B:
public class User
{
public User()
{
FeedIds = new List<long>();
}
public long Id { get; set; }
public List<long> FeedIds { get; set; }
public List<Feed> GetFeeds()
{
return repository.GetFeeds( FeedIds );
}
}
public class Feed
{
public long Id { get; set; }
public long UserId { get; set; }
public User GetUser()
{
return repository.GetUser( UserId );
}
}
以上哪种方法效果最好?我已经在各种示例中看到了这两种方法,但我的印象是我看到的一些示例可能不是最佳实践。
几个简单的相关问题:
- 如果我对对象进行更改,它会自动反映在 Redis 中还是需要保存?我假设是后者,但需要绝对清楚。
- 如果我(可以)使用方法 A,对用户对象 X 的更新是否会反映在整个对象图中被引用的任何地方,或者是否有必要在整个图上保存更改?
- 通过其接口存储对象是否存在问题(即使用
IList<Feed>
而不是List<Feed>
?
抱歉,如果这些问题有点基本 - 直到两周前,我什至从未听说过 Redis - 更不用说 ServiceStack - (我的团队中也没有任何人)所以我们真的从头开始......