redis servicestack client List.Remove(item)不起作用
本文关键字:item 不起作用 Remove servicestack client List redis | 更新日期: 2023-09-27 18:06:42
我正在开发一个"任务控制系统",它将允许用户输入任务描述信息,包括何时执行任务以及任务需要什么环境(操作系统,浏览器等)。
"控制器"保存描述信息并调度任务。当计划的时间到达时,调度器检索任务信息,并为与所需环境匹配的远程机器"排队"任务。
我的第一次尝试是使用关系数据库来保存任务描述和足够的历史信息来跟踪问题(大约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;
}
这个工作示例展示了如何实现List<>。包含List<>。查找,并列出<>删除。一旦应用到"托运人"类,问题就解决了!