如何在redis查询中不写

时间:2015-12-09 09:04:47

标签: redis

如何获取不是从“enduser”开始的所有密钥

  

我的清单

"enduser_tom"
"master_1"
"enduser_jack"
"slave_1"
"slave_2"
"enduser_harry"
"enduser_panther"
  

结果应该是:

"master_1"
"slave_1"
"slave_2"

这是我试过的

  • 键* - >列出所有键
  • keys * enduser - >列出以...结尾的所有键 终端用户
  • keys enduser * - >列出以enduser开头的所有键

因此需要帮助才能获得上述结果。

1 个答案:

答案 0 :(得分:1)

AFAIK KEYS命令无法执行此操作。

使用Lua脚本:

local keys, filtered = redis.call('KEYS', '*'), {};
for i=1,#keys do
    if string.sub(keys[i], 1, string.len(ARGV[1])) ~= ARGV[1] then
        filtered[#filtered + 1] = keys[i];
    end
end
return filtered

SCRIPT LOAD注册脚本,稍后您可以使用EVALSHA执行它:

127.0.0.1:6379> SCRIPT LOAD "local keys, filtered = redis.call('KEYS', '*'), {};\nfor i=1,#keys do\n    if string.sub(keys[i], 1, string.len(ARGV[1])) ~= ARGV[1] then\n        filtered[#filtered + 1] = keys[i];\n    end\nend\nreturn filtered"
"fca86e91217c20c90b268539603bdb16c7fdbc32"
127.0.0.1:6379> EVALSHA fca86e91217c20c90b268539603bdb16c7fdbc32 0 enduser

您也可以将其保存到文件中并使用redis-cli --eval执行它:

redis-cli --eval not_startswith.lua , enduser