Lista de clientes de REDIS SERVICESTACK.REE (artículo) no funciona
-
21-12-2019 - |
Pregunta
Estoy desarrollando un "sistema de control de tareas" que permitirá a sus usuarios ingresar información de descripción de tareas, incluida la tarea y qué entorno (sistema operativo, navegador, etc.) requiere la tarea.
El 'Controlador' guarda la información de la descripción y programe la tarea. Cuando llega el tiempo programado, el programador recupera la información de la tarea y 'colas' la tarea de una máquina remota que coincide con el entorno requerido.
Mi primer recorte en este utilizado una base de datos relacional para persistir las descripciones de la tarea y la información de la historia suficiente para rastrear los problemas (aproximadamente 2 semanas de valor). Pero este no es un problema de "grandes datos" y las relaciones son simples y necesito un mejor rendimiento.
Así que estoy buscando algo que ofrezca más rendimiento. Estoy tratando de usar Redis para esto, pero estoy teniendo algunos problemas. Estoy usando servicestack.redis versión 3.9.71.0 para el cliente y redis 2.8.4 es el servidor.
Este código de muestra se toma del tutorial de Dan Swain. Está actualizado para trabajar con servicestack.redis Client v 3.9.71.0. Gran parte de ellos funciona, pero 'CurrentsHippers.Remuece (Lameshipper);' No funciona. ¿Alguien puede ver por qué eso podría ser?
gracias
public void ShippersUseCase()
{
using (var redisClient = new RedisClient("localhost"))
{
//Create a 'strongly-typed' API that makes all Redis Value operations to apply against Shippers
var redis = redisClient.As<Shipper>();
//Redis lists implement IList<T> while Redis sets implement ICollection<T>
var currentShippers = redis.Lists["urn:shippers:current"];
var prospectiveShippers = redis.Lists["urn:shippers:prospective"];
currentShippers.Add(
new Shipper
{
Id = redis.GetNextSequence(),
CompanyName = "Trains R Us",
DateCreated = DateTime.UtcNow,
ShipperType = ShipperType.Trains,
UniqueRef = Guid.NewGuid()
});
currentShippers.Add(
new Shipper
{
Id = redis.GetNextSequence(),
CompanyName = "Planes R Us",
DateCreated = DateTime.UtcNow,
ShipperType = ShipperType.Planes,
UniqueRef = Guid.NewGuid()
});
var lameShipper = new Shipper
{
Id = redis.GetNextSequence(),
CompanyName = "We do everything!",
DateCreated = DateTime.UtcNow,
ShipperType = ShipperType.All,
UniqueRef = Guid.NewGuid()
};
currentShippers.Add(lameShipper);
Dump("ADDED 3 SHIPPERS:", currentShippers);
currentShippers.Remove(lameShipper);
.
.
.
}
}
Se solucionó el problema agregando estas anulaciones a la clase 'Shipper':
public override bool Equals(object obj)
{
if (obj == null)
{
return false;
}
var input = obj as Shipper;
return input != null && Equals(input);
}
public bool Equals(Shipper other)
{
return other != null && (Id.Equals(other.Id));
}
public override int GetHashCode()
{
return (int)Id;
}
Solución
Este ejemplo de trabajo muestraCómo implementar la lista <>. Contiene, lista <>. Encuentra y lista <>. Retirar.Una vez aplicado a la clase 'Shipper', el problema se resolvió!