Servicestack.net redis: stockage des objets associés par rapport aux ID d'objets associés

StackOverflow https://stackoverflow.com/questions/8914349

  •  29-10-2019
  •  | 
  •  

Question

Mon équipe a décidé de travailler avec Redis via le client ServiceStack.net Redis en tant que référentiel sous-jacent pour un nouveau site Web à haut volume sur lequel nous travaillons. Je ne sais pas vraiment où rechercher la documentation pour cette question (soit pour les documents généraux de redis, soit des documents spécifiques Servicestack.net, soit les deux) - Existe-t-il en fait une source définitive de documentation sur la façon de mettre en œuvre un redis via Servicestack.net qui inclut Tout ce que vous devez savoir sur les concepts redis et les concepts ServiceStack.net, ou devons-nous intégrer séparément la documentation des deux aspects pour obtenir l'image complète ?.

Je suis simplement aux prises avec la façon dont exactement stocker des objets connexes dans le graphique d'objet de notre modèle. Voici un scénario simple avec lequel je veux travailler:

Il y a deux objets dans le système: User et Feed. En termes de RDBM, ces deux objets ont une relation un à plusieurs, c'est-à-dire un User a une collection de Feed Les objets et un flux ne peuvent appartenir qu'à un User. Les flux seront toujours accessibles à partir de Redis via leur utilisateur, mais nous voulons parfois avoir accès à l'utilisateur via une instance de flux.

La question que j'ai est donc de savoir si nous devons stocker les objets connexes comme des propriétés ou si nous stockons le Id valeurs des objets associés? Pour illustrer:

Approche un:

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; }
}

Approche 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 );
    }
}

Laquelle des approches ci-dessus fonctionnera le mieux? J'ai vu les deux approches utilisées dans divers exemples, mais j'ai l'impression que certains des exemples que j'ai vus ne sont peut-être pas les meilleures pratiques.

Quelques questions simples liées:

  • Si je modifie un objet, sera-t-il automatiquement reflété dans Redis ou nécessitera-t-il une sauvegarde? Je suppose ce dernier, mais je dois être absolument clair.
  • Si j'utilise (peut) l'approche A, une mise à jour de l'objet utilisateur X sera-t-elle réfléchie dans l'ensemble du graphique d'objet où qu'il soit référencé ou sera-t-il nécessaire d'enregistrer des modifications à travers le graphique?
  • Y a-t-il un problème avec le stockage d'un objet via son interface (c'est-à-dire une utilisation IList<Feed> par opposition à List<Feed>?

Désolé si ces questions sont un peu basiques - jusqu'à il y a 2 semaines, je n'ai même jamais entendu parler de Redis - sans parler de ServiceStack - (ni personne dans mon équipe), nous partons donc vraiment de zéro ici ...

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top