3

いつタスクを実行するか、タスクに必要な環境 (OS、ブラウザなど) などのタスク記述情報をユーザーが入力できるようにする「タスク制御システム」を開発しています。

「コントローラ」は、説明情報を保存し、タスクをスケジュールします。スケジュールされた時間になると、スケジューラはタスク情報を取得し、必要な環境に一致するリモート マシンのタスクを「キューに入れます」。

これに関する私の最初のカットでは、リレーショナル データベースを使用して、タスクの説明と、問題を追跡するのに十分な履歴情報 (約 2 週間分) を保持しました。しかし、これは「ビッグデータ」の問題ではなく、関係は単純であり、パフォーマンスを向上させる必要があります。

というわけで、もっと高性能なものを探しています。これにredisを使用しようとしていますが、いくつか問題があります。クライアントに ServiceStack.Redis バージョン 3.9.71.0 を使用しており、Redis 2.8.4 がサーバーです。

このサンプル コードは、Dan Swain のチュートリアルから抜粋したものです。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);

            .
            .
            .

        }
    }

これらのオーバーライドを「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;
    }
4

1 に答える 1

1

This working example shows how to implement List<>.Contains, List<>.Find, and List<>.Remove. Once applied to the 'Shipper' class the problem was solved!

于 2014-06-07T00:55:52.627 に答える