ServiceStack.net Redis: memorizzazione di oggetti correlati rispetto a ID oggetti correlati

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

  •  29-10-2019
  •  | 
  •  

Domanda

Il mio team ha deciso di lavorare con Redis tramite ServiceStack.net Redis Client come repository sottostante per un nuovo sito Web ad alto volume su cui stiamo lavorando. Non sono davvero sicuro di dove cercare la documentazione per questa domanda (né per i documenti generali di Redis o ServiceStack.net specifici o entrambi) - esiste in realtà una fonte definitiva per la documentazione su come implementare un Redis tramite ServiceStack.net che include Tutto quello che devi sapere sui concetti di Redis e ServiceStack.net, o dobbiamo integrare la documentazione da entrambi gli aspetti separatamente per ottenere il quadro completo?.

Sto solo alle prese con come archiviare gli oggetti correlati nel grafico a oggetti del nostro modello. Ecco un semplice scenario con cui voglio lavorare:

Ci sono due oggetti nel sistema: User e Feed. In termini RDBM questi due oggetti hanno una relazione da uno a molti, cioè a User ha una collezione di Feed oggetti e un feed possono appartenere a uno solo User. I feed saranno sempre accessibili da Redis tramite il proprio utente, ma occasionalmente vorremmo accedere all'utente tramite un'istanza di feed.

Quindi la domanda che ho è se dovremmo conservare gli oggetti correlati come proprietà o dovremmo archiviare il Id Valori degli oggetti correlati? Illustrare:

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

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

Quale degli approcci di cui sopra funzionerà meglio? Ho visto entrambi gli approcci usati in vari esempi, ma ho l'impressione che alcuni degli esempi che ho visto potrebbero non essere la migliore pratica.

Alcune semplici domande correlate:

  • Se apporto una modifica a un oggetto, verrà automaticamente riflesso in Redis o richiederà un salvataggio? Suppongo che quest'ultimo, ma devo essere assolutamente chiaro.
  • Se io (posso) utilizzare l'approccio A, un aggiornamento dell'oggetto utente x verrà riflesso nell'intero grafico degli oggetti ovunque sia referenziato o sarà necessario salvare le modifiche attraverso il grafico?
  • C'è un problema con la memorizzazione di un oggetto tramite l'interfaccia (cioè l'uso IList<Feed> al contrario di List<Feed>?

Scusa se queste domande sono un po 'semplici - fino a 2 settimane fa non avrei mai sentito parlare di Redis - figuriamoci ServiceStack - (né avevo nessuno nella mia squadra) quindi stiamo davvero iniziando da zero qui ...

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top