如何在redis搜索中使用通配符

时间:2016-09-09 14:24:42

标签: redis

我有以下哈希:

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的所有规则。并使用我的客户端应用程序循环结果... ?

1 个答案:

答案 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)在整个迭代过程中重复相同的操作。

希望这有帮助