目前我们在我们的应用程序中使用Redis来存储不同类型的数据,使用前缀来拆分每个组。我们有许多“数据组”,它们将在生产环境中随着数量和规模而增长。
我们的要求意味着删除特定类型数据的所有键(具有给定前缀的所有键),当然我们不想使用KEYS
命令< / strong>(我们不会使用多个DB,因为它是Redis中不推荐使用的做法)。
此外,我们计划在生产环境中使用Redis Cluster,我们必须以同样的方式满足此要求。
有一种标准方法可以删除给定主题标签的所有密钥吗? (参见文档here)
注意:我们不会在不同的Redis实例中拆分数据,因为它可能会导致系统架构混乱(我们应该为每个实例管理故障转移)
答案 0 :(得分:1)
您应该考虑维护一种标记机制,例如将一组键与每个标记相关联,这样您就可以立即使它们全部失效。
每次为键写入值时,都应将其键插入相应的标记集。
> SET {user}:123 john
> SADD :tags:{user} {user}:123
> SET {user}:678 mary
> SADD :tags:{user} {user}:678
然后要使其无效,请使用SMEMBERS获取无效的密钥。
> SMEMBERS :tags:{user}
1) "{user}:678"
2) "{user}:123"
> DEL {user}:678 {user}:123
答案 1 :(得分:0)
使用问题this answer中的How to atomically delete keys matching a pattern using Redis。这是用于按模式删除键的bash脚本。为每个Redis群集主节点执行它们。