2015-09-07 91 views
0

当我们使用servicestack类型的客户端如何使用属性确定从Redis中删除项目?

redisset = typedclient.Sets["setkey"]; 
redisset.remove(object1); 

它通常会检查object1的每一个特性,从Redis的集中删除的项目,我们如何定义类的object1检查平等哪个属性?

例如,object1具有这些属性

session_key:"somekey" 
session_name:"a name" 
author:"Harry" 
... 

当我们试图从一组删除它,我们只希望它来检查,看看是否session_key可以是匹配,而忽略其他属性。

我以为我看到它曾经有些地方,但我找不到它了。

回答

0

集合中的复杂类型被blobbed为JSON。 Redis Operations都没有处理对Redis不透明的blobbed值。您需要遍历客户端上的Set中的每个项目,即将其反序列化为对象,检查会话密钥,然后删除匹配的条目。

在服务器上执行此操作的唯一选择是使用自定义服务器端lua脚本将json解析为Lua对象并以此方式检查属性。

+0

感谢您的评论。但只是为了确保,我的意思是当我尝试使用键入的客户端从set中删除某个项目时,set1.remove(item1)我假定remove方法将item1的每个属性都匹配到set成员项目,当它找到一个匹配时,它会删除它。我问的是,是否有一种方式,以便我可以告诉删除方法只查找某个属性的匹配,但不是所有这些 – shawhu

+0

我还记得从某处我可以重写某种称为Equal的方法 - 当我定义该项目的类 – shawhu

+0

@shawhu您在这里混淆了不相关的概念,每件事情都需要保持一致,因为Redis正在比较两个不透明的JSON字符串是否相等。这不能与.NET类中的重载相等成员相混淆,该类只能在.NET程序中应用,即不适用于Redis服务器。 – mythz