使用通配符删除redis中的哈希属性

时间:2014-05-08 14:35:24

标签: python redis key-value nosql

在redis中,我们可以使用通配符,

KEYS foo* - >找到钥匙。

现在我想使用通配符删除hashmap的特定字段。考虑如下。 创建hashmap

 HMSET myhash f "g" field1 "Hello" field2 "World" 

现在我想使用像

这样的通配符删除密钥
 DEL myha*

有可能吗?

此外,我想使用通配符(如

)从SET中删除特定字段
DEL myhash field*

这也可能吗?

提前完成。

1 个答案:

答案 0 :(得分:1)

要使用通配符从SET中删除特定字段,您可以使用此LUA脚本:

-- ARGV[1] - hash key
-- ARGV[1] - lua pattern 
local fields = redis.call("HKEYS", ARGV[1]);
local retVal = {};
for key, value in pairs(fields) do
    if (string.match(value, ARGV[2])) then
        table.insert(retVal, value);
        redis.call("HDEL", ARGV[1], value);
    end
end

return retVal;

此脚本的复杂性为 O(n)。脚本返回与给定模式匹配的已删除字段。查看string.match tutorial到lua模式匹配功能。

使用PHP的{​​{1}}中的示例用法:

phpredis