我认为这很简单。
解决方案1(劣等,不推荐)
您的方法
ZSCAN MySet 0 MATCH Id:92 count1无法解决,因为存储的字符串
"{"Id":"92"...不是"{"Id:92"...。该字符串已更改为另一种格式。因此,尝试使用MATCHId":"64或类似的东西来匹配redis中的json序列化数据。我不熟悉json.net,因此实际的字符串留给您发现。
顺便问一下,我必须问您是否确实
ZSCAN MySet 0 MATCH Id:92 count 1返回了游标?我怀疑您使用
ZSCAN了错误的方式。
解决方案2(更好,强烈建议)
ZSCAN当您的排序集不大并且您知道如何通过Redis的Lua事务节省网络往返时间时,它会很好。这仍然使“按ID查找”操作O(n)。因此,更好的解决方案是通过以下方式更改数据模型:
更改来自的排序集
# Score Value0 1443476076 {"Id":"92","Ref":"7ADT","DTime":1443476076,"ATime":1443901554,"ExTime":0,"SPName":"7ADT33CFSAU6","StPName":"7ADT33CFSAU6"}1 1443482969 {"Id":"11","Ref":"DAJT","DTime":1443482969,"ATime":1443901326,"ExTime":0,"SPName":"DAJTJTT4T02O","StPName":"DAJTJTT4T02O"}至
# Score Value0 1443476076 Id:921 1443482969 Id:11
将其余的详细数据移动到另一组哈希类型键中:
# Key field-value field-value ...0 Id:92 Ref-7ADT DTime-1443476076 ...1 Id:11 Ref-7ADT DTime-1443476076 ...
然后,您通过执行id进行定位
hgetall id:92。至于按日期范围查询,你需要做的
ZRANGEBYSCORE sortedset mindatemaxdate,然后
hgetall由每一个ID只能有一个。您最好使用lua将这些命令包装为一个,这样仍然会非常快!
NoSql数据库中的数据需要采用上述冗余方式进行组织。这可能会使一些常规操作涉及多个命令和往返,但是可以通过redis的lua功能解决。我强烈推荐redis的lua功能,使它将命令包装到一个网络往返中,这些命令都在redis服务器端执行,并且原子且超快!
如果您不知道有什么请回覆



