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

¿Fue útil?

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ó!

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