Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo almacenar el tipo de colección Lista en Redis a través de StackExchange.

Cómo almacenar el tipo de colección Lista en Redis a través de StackExchange.

StackExchange, de StackOverFlow, es un contenedor .NET para Redis que cada vez más desarrolladores .NET utilizan en sus proyectos.

Dado que SS ya no es de código abierto en su nueva versión y tiene restricciones en la versión gratuita, la gran mayoría de los desarrolladores que utilizan ServiceStack se están migrando gradualmente a ServiceStack.

Problemas reales

Los desarrolladores que utilizan .NET encontrarán que el tipo Lista no tiene ninguna encapsulación de almacenamiento, por lo que deben implementar requisitos similares a los siguientes:

Supongamos que tengo un modelo de Cliente. public.class.Cliente

{

public.string.FirstName.{get; set;?}

público?

público ?

público?

público?

}

var clientes = new Listlt;Customergt;();

¿Cómo almacenar Listlt;customergt;clientes en Redis?

Pros y contras

Esto se debe a que StackExchange.Redis es un proxy de cliente puro, que solo implementa las funciones proporcionadas por Redis de forma gratuita y no encapsula ninguna otra función. Tampoco tiene coincidencia de tipos automática como un ORM.

Simplemente almacena pares clave-valor, como cadenas o

byte[] . Entonces, como puede ver, debe serializarse y almacenarse en un formato similar a Json. De manera similar a Protobuf-Net, usar NewtonSoft de terceros o el popular formato de serialización Protocol.Buffers

de Google también es una buena opción.

Redis admite cinco tipos de almacenamiento: cadenas, hashes, listas, conjuntos y conjuntos ordenados que, como se mencionó anteriormente, están compuestos por cadenas.

El tipo Set está desordenado y debe tener valores únicos, mientras que el tipo Lista está ordenado y permite duplicados.

Solución

Si solo desea almacenar en caché un lote de datos Listlt;Customergt;, encapsule sus propios métodos ListGet() y ListSet().

Hice la comparación usando List y String.

El tipo de lista de Redis también se diferencia del mundo .NET en que en realidad es una cola bidireccional que puede insertar valores a izquierda y derecha.

Entonces, si desea insertar datos en lotes, debe insertarlos uno por uno. El código se simplifica de la siguiente manera: // ListSet encapsulado

public?void?ListSetlt;Tgt;(string?key,?Listlt;Tgt;?value)

{

.....

// Las siguientes bases de datos son objetos de bases de datos de Redis.

foreach(var.single.in.value)

{

var.s.=.ConvertJson(single);?//serialize

database.ListRightPush(key,?s);?//Insértalos uno por uno

}

}

/ListGet encapsulado

public?void?ListGetlt;Tgt;(string?key)

{

...

//ListRange devuelve un conjunto de strings Objetos

//Necesitan ser deserializados en entidades una por una

var?vList?=?database.ListRange(key)?;?

Listlt ;Tgt; ?resultado?=?new?Listlt;Tgt;();

foreach?(var?item?in?vList)

{

var?model ?=?ConvertObjlt;Tgt;?(item);?//Deserialize

resultado.Add(model);

}

return?