Redis Cluster:如何删除特定主题标签的所有键

Redis Cluster: how to delete all keys for a specific hashtag

目前我们在我们的应用程序中使用 Redis 来存储不同类型的数据,使用前缀来拆分每个组。我们有很多 "data groups",它们会在生产环境中增长,无论是数量还是规模。

我们有一个要求,意味着删除特定类型数据的所有键(所有具有给定前缀的键),当然我们不想使用 KEYS command (我们不会使用多个数据库,因为它在 Redis 中是不推荐的做法)。

此外,我们计划在生产环境中使用 Redis Cluster,我们必须以相同的方式满足此要求。

有一种标准方法可以删除给定主题标签的所有键吗? (参见文档 here

注意:我们不会在不同的 Redis 实例中拆分数据,因为这可能会导致系统架构混乱(我们应该为每个实例管理故障转移)

使用this answer from question How to atomically delete keys matching a pattern using Redis。这是 bash 脚本,用于按模式删除键。为每个 Redis 集群主节点执行它们。

您应该考虑维护一种标记机制,例如将一组键与每个标签相关联,这样您就可以一次性使它们全部失效。

每次给键写一个值的时候,也应该把它的键插入到相应的标签集中。

> SET {user}:123 john
> SADD :tags:{user} {user}:123

> SET {user}:678 mary
> SADD :tags:{user} {user}:678

然后作废,使用SMEMBERS获取作废的keys。

> SMEMBERS :tags:{user}
1) "{user}:678"
2) "{user}:123"

> DEL {user}:678 {user}:123