如何在REDIS中列出没有序列号的密钥?

时间:2016-05-27 06:03:51

标签: redis nosql

我正在尝试列出具有特定模式的键,如下所示:

KEYS "*Team*"

我正在获得带有序列号的结果集,如下所示:

  

1)" TeamMetricSummary_google_bps_app_google wfep   league_chambersc2016:04-03-2016_06-04-2016"

     

2)" \ xac \ xed \ x00 \ x05t \ x00TTeamMetricSummary_google_bps_app_google wfep   league_malini.gto:12-06-2015_04-02-2016"

我的问题是我想避免结果集中的序列号。

这可能吗?

2 个答案:

答案 0 :(得分:1)

这是不可能的。 Redis将返回整个密钥。您可以在应用程序逻辑中使用正则表达式或字符串操作(例如split)来实现此目的。为此你必须知道你的输入。例如,如果您的密钥采用xTeamNamey之类的模式。其中x和y是你想要避免的一些约束(序列号),你可以像x:TeamName:y那样插入你的密钥。在检索中,您可以使用string.split(":")[1]来获取TeamName。

答案 1 :(得分:0)

回答您的具体问题
Redis支持Lua脚本。如果您使用的是与Lua 5.0或更高版本捆绑在一起的Redis版本,则Lua脚本可以使用regular expressions。编写一个执行redis.call KEYS命令的Lua脚本,然后执行模式匹配以删除序列号。

<强>替代
顺便说一句,假设上面是生产中运行的软件的一部分,我建议这样做:不要在生产中使用KEYS命令!正如it's documentation所述,Redis必须通过所有键来获取与您的模式匹配的键。或者,您可以考虑对每次添加密钥时修剪序列号的Redis set执行影子写入。当您需要键列表时,您可以阅读整个集。但是,您必须手动处理密钥到期。