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
目前我们在我们的应用程序中使用 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