C# ServiceStack.Net Redis:存储相关对象与相关对象ID
我的团队决定通过ServiceStack.net Redis客户端与Redis合作,作为我们正在开发的一个新的高容量网站的基础存储库。我真的不确定在哪里可以找到这个问题的文档(无论是一般的Redis文档还是特定的ServiceStack.Net文档,或者两者兼而有之)——关于如何通过ServiceStack.Net实现Redis的文档是否有明确的来源,其中包括您需要了解的关于Redis概念和ServiceStack.Net概念的所有信息,还是我们需要分别从这两个方面整合文档以获得完整的信息 我只是想弄清楚如何在模型的对象图中准确地存储相关对象。下面是一个我想处理的简单场景: 系统中有两个对象:C# ServiceStack.Net Redis:存储相关对象与相关对象ID,c#,.net,redis,servicestack,C#,.net,Redis,servicestack,我的团队决定通过ServiceStack.net Redis客户端与Redis合作,作为我们正在开发的一个新的高容量网站的基础存储库。我真的不确定在哪里可以找到这个问题的文档(无论是一般的Redis文档还是特定的ServiceStack.Net文档,或者两者兼而有之)——关于如何通过ServiceStack.Net实现Redis的文档是否有明确的来源,其中包括您需要了解的关于Redis概念和ServiceStack.Net概念的所有信息,还是我们需要分别从这两个方面整合文档以获得完整的信息 我只
User
和Feed
。在RDBMS术语中,这两个对象具有一对多关系,即用户
具有提要
对象的集合,提要只能属于一个用户
。提要将始终通过其用户从Redis访问,但偶尔我们希望通过提要实例访问该用户
所以我的问题是,我们是应该将相关对象存储为属性,还是应该存储相关对象的Id
值?举例说明:
接近A:
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; }
}
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 );
}
}
公共类用户
{
公共用户()
{
feed=新列表();
}
公共int Id{get;set;}
公共列表提要{get;set;}
//其他属性
}
公共类提要
{
公共长Id{get;set;}
公共用户{get;set;}
}
方法B:
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; }
}
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 );
}
}
公共类用户
{
公共用户()
{
FeedIds=新列表();
}
公共长Id{get;set;}
公共列表feedId{get;set;}
公共列表GetFeeds()
{
返回repository.GetFeeds(feedid);
}
}
公共类提要
{
公共长Id{get;set;}
公共长用户标识{get;set;}
公共用户GetUser()
{
返回repository.GetUser(UserId);
}
}
以上哪种方法最有效?我在不同的例子中看到了这两种方法,但我得到的印象是,我看到的一些例子可能不是最佳实践
几个简单的相关问题:
- 如果我对某个对象进行更改,它会自动反映在Redis中还是需要保存?我假设是后者,但需要绝对清楚
- 如果我(可以)使用方法A,对用户对象X的更新是否会反映在整个对象图中,无论它在何处被引用,还是有必要在整个对象图中保存更改
- 通过对象的接口存储对象是否有问题(即使用
而不是IList
List
抱歉,如果这些问题有点基本的话——直到两周前,我还没有听说过Redis——更不用说ServiceStack了(我的团队中也没有任何人)因此,我们真的从零开始…与其重新散列大量其他野外文档,我将列出一些关于Redis+ServiceStack的Redis客户端的背景信息:
Id
(尽管有此约定)。
基本上,POCOs以序列化JSON的形式存储在Redis中,其中包含typeof(Poco).Name
和Id
,用于为该实例形成唯一密钥。例如:
urn:Poco:{Id} => '{"Id":1,"Foo":"Bar"}'
POCOs在th