我有以下哈希:
HMSET rules:1231231234_11:00_17:00 fw 4444 dm test.abc.com days 'thu, tue, wed'
HMSET rules:1231231234_9:00_10:59 fw 2211 dm anothertest.abc.com days 'thu'
无论如何我可以搜索规则哈希并找到所有前缀为1231231234的记录吗? 像
这样的东西HGET rules:1231231234*
或者......也许我创建数据的方式是错误的。什么是创建这样的数据集的最佳方法: (json记谱法)
{
pn: 1231231234,
rules: [{
"expiration_date" : "",
"days_of_week" : "Thu, Tue, Wed",
"start_time" : "11:00",
"end_time" : "17:00",
"fw" : "9999"
},
{
"rule_expiration_date" : "",
"days_of_week" : "Thu",
"start_time" : "9:00",
"end_time" : "10:59",
"fw" : "2222"
}]
}
如何使用这些数据:
我需要根据当前时间找到适用于我的规则。 例如,当我的应用程序收到请求" process" pn 1231231234,我需要查找该pn编号的所有规则,然后找出哪个规则与我当前的星期几和时间戳匹配。
我不介意找回给定pn的所有规则,然后让客户端代码循环以找到正确的规则。
编辑1
以我目前创建的方式使用我的数据,我尝试过像这样的HSCAN:
127.0.0.1:6379[1]> HSCAN rules 0 MATCH 1231231234*
1) "0"
2) (empty list or set)
127.0.0.1:6379[1]>
编辑2
作为测试,我尝试了这种类型的结构:
HMSET rules:1231231234 tue_11:00_17:00 fw 9999
HMSET rules:1231231234 wed_11:00_17:00 fw 9999
HMSET rules:1231231234 thur_11:00_17:00 fw 9999
HMSET rules:1231231234 thu_9:00_10:59 fw 2222
然后我可以看到主要pn的所有规则。并使用我的客户端应用程序循环结果... ?
答案 0 :(得分:2)
您需要使用scan而不是hscan。
结合 SCAN 和 HGETALL ,您可以实现这一目标。
1)执行扫描并获取与您的模式匹配的所有值
127.0.0.1:6379> scan 0 match rules:1231231234*
1) "0"
2) 1) "rules:1231231234_11:00_17:00"
2) "rules:1231231234_9:00_10:59"
2)然后,对于app逻辑中的每个键,迭代它们并执行hgetall
127.0.0.1:6379> hgetall rules:1231231234_11:00_17:00
1) "fw"
2) "4444"
3) "dm"
4) "test.abc.com"
5) "days"
6) "thu, tue, wed"
3)如果它符合您的标准流程。
4)在整个迭代过程中重复相同的操作。
希望这有帮助