如何在redis中清除与某个字符串域关联的所有哈希?

如何在redis中清除与某个字符串域关联的所有哈希?,redis,Redis,例如,我有用户:1,用户:2,用户:3用户:2000。我想删除所有用户,以便重新开始。是否有一种方法可以在不知道确切的密钥的情况下执行此操作,即我只想删除用户域中的所有密钥?我有兴趣将此作为应用程序服务器启动任务的一部分进行操作。比使用“键”扫描所有键并通过正则表达式匹配删除更好的方法是使用标记机制,在服务器中维护一个Redis集,该集保存关系标记键,如本文所述: 我使用了一种类似的方法,这是我最后用来设置与一个或多个标记相关的键值的Lua脚本: local tagcount = 0 local

例如,我有
用户:1
用户:2
用户:3
<代码>用户:2000。我想删除所有
用户
,以便重新开始。是否有一种方法可以在不知道确切的密钥的情况下执行此操作,即我只想删除
用户
域中的所有密钥?我有兴趣将此作为应用程序服务器启动任务的一部分进行操作。

比使用“键”扫描所有键并通过正则表达式匹配删除更好的方法是使用标记机制,在服务器中维护一个Redis集,该集保存关系标记键,如本文所述:

我使用了一种类似的方法,这是我最后用来设置与一个或多个标记相关的键值的Lua脚本:

local tagcount = 0
local cacheKey = KEYS[1]
local exp = ARGV[2]
local setValue = ARGV[1]

-- For each Tag, add the reference to the TagKey Set
for i=2,#KEYS do
    local tag = ':tag:' .. KEYS[i]
    local tagTtl = redis.call('ttl', tag)
    tagcount = tagcount + redis.call('sadd', tag, cacheKey)
    if(exp ~= nil and tagTtl ~= -1) then
        -- Tag is volatile or was not found. Expiration provided. Set the Expiration.
        redis.call('expire', tag, math.max(tagTtl, exp))
    else
        -- Tag is not volatile or the key to add is not volatile, mark the tag SET as not volatile
        redis.call('persist', tag)
    end
end

-- Set the cache key-value
if(setValue) then
    if(exp ~= nil) then
            redis.call('setex', cacheKey, exp, setValue)
    else
            redis.call('set', cacheKey, setValue)
    end
end
return tagcount
请注意,在表示标记集的键前面加上“:tag:”


如果您不需要原子方式来按标记删除密钥,那么您可以使用Redis客户端通过两个操作来完成,例如获取标记“user”的成员使用
SMEMBERS:tag:user
并使用
DEL-key1-key2..
命令删除键。

可能重复的@TimCooper操作没有明确要求原子性,但无论如何,我在该线程的回答提供了解决方案。