Redis ServiceStackクライアントList.Remove(Item)が機能しない
-
21-12-2019 - |
質問
タスクを実行するときとタスクに必要な環境(OS、ブラウザなど)を含むタスク記述情報をユーザーに入力することができる「タスク制御システム」を開発しています。
'Controller'は説明情報を保存してタスクをスケジュールします。スケジュールされた時間が到着すると、スケジューラは必要な環境と一致するリモートマシンのタスク情報と「キュー」のタスクを取得します。
私の最初のカットは、問題を追跡するためのタスクの説明と十分な履歴情報を永続化するためにリレーショナルデータベースを使用しました(約2週間の価値)。しかし、これは「大きなデータ」の問題ではなく、関係は単純であり、私はより良いパフォーマンスが必要です。
だから私はより多くのパフォーマンスを提供するものを探しています。 私はこれをRedisを使おうとしていますが、私はいくつかの問題を抱えています。 Client、Redis 2.8.4はサーバーであるServicestack.redisバージョン3.9.71.0を使用しています。
このサンプルコードは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);
.
.
.
}
}
.
「荷送人」クラスにこれらの上書きを追加して問題を修正しました:
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;
}
. 解決
この動作例ショーリスト<>を実装する方法を含みます。List <>を含みます。「荷送人」クラスに適用されると、問題は解決されました!
所属していません StackOverflow