ServiceStack.Net Redis:存储相关对象与相关对象ID

我的团队决定通过ServiceStack.net Redis Client与Redis一起使用,作为我们正在处理的新的高流量网站的基础存储库。我真的不确定在哪里可以找到有关此问题的文档(对于一般的Redis文档还是特定的ServiceStack.Net文档,或两者兼而有之)-实际上是否存在有关如何通过ServiceStack.Net实现Redis的文档的权威来源您需要了解有关Redis概念和ServiceStack.Net概念的全部知识,还是我们需要分别集成这两个方面的文档才能获得完整的概览?


我只是在努力如何在模型的对象图中准确存储相关对象。这是我要使用的简单方案:


系统中有两个对象:User和Feed。用RDBMS术语来说,这两个对象具有一对多的关系,即,一个User具有Feed对象的集合,而提要只能属于一个User。Feed始终会通过Redis的用户进行访问,但有时我们希望通过feed实例来访问该用户。


因此,我的问题是我们应该将相关对象存储为属性还是应该存储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; }

}

方法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>?

抱歉,如果这些问题有点基本-直到2周前,我什至没有听说过Redis-更不用说ServiceStack了(我的团队中也没有任何人),所以我们真的是从零开始。


收到一只叮咚
浏览 724回答 2
2回答

慕村9548890

现在,我想在另一个方面进行扩展,因为我已经与Redis合作了一段时间了:如果您的对象的集合(List<Feed>在上面的示例中)会变大,那么您将获得每个集合的完整集合时间,你得到对象。这可能是带宽的问题-在我们的情况下,每次登录都会返回用户以及该用户的所有供稿项,这并不理想。关键是无论采用哪种对象关系方法,正确构造模型结构都是很重要的……&nbsp;
打开App,查看更多内容
随时随地看视频慕课网APP