在redis中,我将对象存储在一个有序集合中。 在我的解决方案中,能够按日期运行范围查询非常重要,因此我将项目存储为分数为每个项目时间戳的项,例如:
# Score Value
0 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"}
然而,在其他情况下,我需要根据ID在集合中找到单个项目。
我知道不能像查询nosql数据库那样查询这个数据结构,但是我尝试使用ZSCAN
,但不起作用。
ZSCAN MySet 0 MATCH Id:92 count 1
它返回:"空列表或集合"
也许我需要使用不同的序列化方式?我已经使用了Json.Net进行序列化。
如果可能的话,我该如何实现这个目标:使用日期作为分数,并仍然能够通过ID查找项目?
谢谢,
Lars
编辑:
假设这是不可能的,但任何想法或意见都是可以接受的:
参考:http://openmymind.net/2011/11/8/Redis-Zero-To-Master-In-30-Minutes-Part-1/
在Redis中,数据只能通过其键来查询。即使我们使用哈希表,我们也不能说“获取键的值等于sayan的字段”。
编辑2:
我尝试过:
ZSCAN MySet 0 MATCH *87*
127.0.0.1:6379> ZSCAN MySet 0 MATCH *87*
1) "192"
2) 1) "{\"Id\":\"64\",\"Ref\":\"XQH4\",\"DTime\":1443837798,\"ATime\":1444187707,\"ExTime\":0,\"SPName\":\"XQH4BPGW47FM\",\"StPName\":\"XQH4BPGW47FM\"}"
2) "1443837798"
3) "{\"Id\":\"87\",\"Ref\":\"5CY6\",\"DTime\":1443519199,\"ATime\":1444172326,\"ExTime\":0,\"SPName\":\"5CY6DHP23RXB\",\"StPName\":\"5CY6DHP23RXB\"}"
4) "1443519199"
它找到了所需的项目,但还发现另一个属性ATime中有87的出现次数。拥有更多独特且更长的ID可能会以这种方式起作用,我需要在代码中过滤结果以找到具有其属性中精确值的那个。
仍然可以接受建议。
HGET
而不是HGETALL
,对吗? - philraj