ServiceStack.Net Redis: хранение связанных объектов и идентификаторы связанных объектов

Моя команда решила работать с Redis через ServiceStack.net Redis Client в качестве основного репозитория для нового массового веб-сайта, над которым мы работаем. Я не совсем уверен, где искать документацию по этому вопросу (либо для общих документов Redis, либо для конкретных документов ServiceStack.Net или обоих) - есть ли на самом деле исчерпывающий источник документации о том, как реализовать Redis через ServiceStack.Net, который включает все, что вам нужно знать как о концепциях Redis, так и о концепциях ServiceStack.Net, или нам нужно интегрировать документацию по обоим аспектам отдельно, чтобы получить полную картину ?.

Я просто пытаюсь понять, как именно хранить связанные объекты в графе объектов нашей модели. Вот простой сценарий, с которым я хочу работать:

В системе два объекта: Пользователь и Feed . В терминах РСУБД эти два объекта имеют отношение «один ко многим», то есть Пользователь имеет коллекцию из объектов Feed , и канал может принадлежать только одному Пользователю. . Доступ к каналам всегда будет осуществляться из 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; }
}

Подход 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 вместо List ?

Извините, если эти вопросы немного базовые - до 2 недель назад я я никогда даже не слышал о Redis - не говоря уже о ServiceStack - (и никого из моей команды), так что мы действительно начинаем здесь с нуля ...

39
задан Zac Seth 18 January 2012 в 17:16
поделиться