如何根据 json 归档从 Redis 排序集中删除项目

How to remove item from Redis sorted set based on json filed

我正在使用 Redis 来设计用户时间线(如在推特中)。我正在使用排序集来存储 json 值,时间戳记为 score

 zrange feed:user:10000001 0 10 WITHSCORES
 1) "{\"postId\":10000411,\"userId\":10000001}"
 2) "1639073241754"
 3) "{\"postId\":10000412,\"userId\":10000002}"
 4) "1639073241748"

当用户A取消关注B时,如何从用户A的时间线中删除用户B的所有帖子?

由于排序集(和 redis)不支持查询 json 数据,Oher 对 SO 的回应建议将 json 值存储在具有 postId 作为子键的散列中并存储postId 作为排序集中的值。但是当基于它删除时,我在哪里存储 userId 来查找它?我如何实现此功能?

我认为您应该完全重构存储数据的方式。我建议这样:

  1. 有一组 feed:user:{userId} 仅存储 postId。
  2. 有一组user:post:{userId},其中存储了一组用户的postId

因此,为了“从用户 A 的时间轴中删除用户 B 的所有帖子”,您需要首先执行类似 redis> SMEMBERS user:post:{userBId} 的查询以检索所有 B 的 postId 并将其存储到变量“results" 然后执行这个命令 ZREM feed:user:{userAId} results