いつタスクを実行するか、タスクに必要な環境 (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;
}