我正在尝试列出具有特定模式的键,如下所示:
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"
我的问题是我想避免结果集中的序列号。
这可能吗?
答案 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
执行影子写入。当您需要键列表时,您可以阅读整个集。但是,您必须手动处理密钥到期。