Redis Servicestack клиент List.Remove(элемент) не работает

Я разрабатываю "Систему управления задачами", которая позволит ее пользователям вводить информацию описания задач, включая информацию о том, когда выполнять задачу и в какой среде (ОС, браузере и т. Д.) Эта задача требуется.

"Контроллер" сохраняет информацию описания и планирует задачу. Когда наступает запланированное время, планировщик получает информацию о задаче и "ставит в очередь" задачу для удаленного компьютера, соответствующего требуемой среде.

Первым делом я использовал реляционную базу данных, чтобы сохранить описания задач и достаточно информации из истории для отслеживания проблем (около 2 недель). Но это не проблема больших данных, и отношения просты, и мне нужна лучшая производительность.

Поэтому я ищу что-то, что предлагает большую производительность. Я пытаюсь использовать Redis для этого, но у меня есть некоторые проблемы. Я использую ServiceStack.Redis версии 3.9.71.0 для клиента, а Redis 2.8.4 является сервером.

Этот пример кода взят из учебника Дэна Суэйна. Он обновлен для работы с клиентом ServiceStack.Redis v 3.9.71.0. Многое из этого работает, но 'currentShippers.Remove(lameShipper);' не работает. Кто-нибудь может понять, почему это может быть?

Спасибо

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

            .
            .
            .

        }
    }

Исправлена ​​проблема путем добавления этих переопределений в класс "Грузоотправитель":

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

1 ответ

Решение

В этом рабочем примере показано, как реализовать List<>.Contains, List<>.Find и List<>.Remove. После обращения в класс "Грузоотправитель" проблема была решена!

Другие вопросы по тегам