ServiceStack.net Redis: almacenamiento de objetos relacionados versus ID de objeto relacionados

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

  •  29-10-2019
  •  | 
  •  

Pregunta

Mi equipo ha decidido trabajar con Redis a través del cliente ServiceStack.net Redis como un repositorio subyacente para un nuevo sitio web de alto volumen en el que estamos trabajando. No estoy realmente seguro de dónde buscar documentación para esta pregunta (ya sea para los documentos generales de Redis o los documentos específicos de ServiceStack.net o ambos), ¿hay realmente una fuente definitiva para la documentación sobre cómo implementar un Redis a través de ServiceStack.net que incluye? Todo lo que necesita saber sobre los conceptos de Redis y los conceptos ServiceStack.net, ¿o necesitamos integrar la documentación de ambos aspectos por separado para obtener la imagen completa?

Solo estoy lidiando con cómo almacenar exactamente los objetos relacionados en el gráfico de objetos de nuestro modelo. Aquí hay un escenario simple con el que quiero trabajar:

Hay dos objetos en el sistema: User y Feed. En términos de RDBMS, estos dos objetos tienen una relación de uno a muchos, es decir, un User tiene una colección de Feed Los objetos y un alimento solo pueden pertenecer a uno User. Siempre se accederá a los feeds desde Redis a través de su usuario, pero ocasionalmente queremos obtener acceso al usuario a través de una instancia de feed.

Entonces, la pregunta que tengo es si deberíamos almacenar los objetos relacionados como propiedades o deberíamos almacenar el Id valores de los objetos relacionados? Para ilustrar:

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

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

¿Cuál de los enfoques anteriores funcionará mejor? He visto ambos enfoques utilizados en varios ejemplos, pero tengo la impresión de que algunos de los ejemplos que he visto pueden no ser la mejor práctica.

Algunas preguntas simples relacionadas:

  • Si hago un cambio en un objeto, ¿se reflejará automáticamente en Redis o requerirá una guardia? Supongo que esto último, pero necesito ser absolutamente claro.
  • Si (puedo) usar el enfoque A, ¿se reflejará una actualización del objeto de usuario X en todo el gráfico de objeto donde sea que se haga referencia o será necesario guardar los cambios en el gráfico?
  • ¿Existe algún problema al almacenar un objeto a través de su interfaz (es decir, usar IList<Feed> Opuesto a List<Feed>?

Lo siento si estas preguntas son un poco básicas, hasta hace 2 semanas, nunca había oído hablar de Redis, y mucho menos en servicio de servicio, (ni nadie en mi equipo), así que realmente estamos comenzando desde cero aquí ...

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top