如何根据 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
来查找它?我如何实现此功能?
我认为您应该完全重构存储数据的方式。我建议这样:
- 有一组
feed:user:{userId}
仅存储 postId。
- 有一组
user:post:{userId}
,其中存储了一组用户的postId
因此,为了“从用户 A 的时间轴中删除用户 B 的所有帖子”,您需要首先执行类似 redis> SMEMBERS user:post:{userBId}
的查询以检索所有 B 的 postId 并将其存储到变量“results
" 然后执行这个命令 ZREM feed:user:{userAId} results
我正在使用 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
来查找它?我如何实现此功能?
我认为您应该完全重构存储数据的方式。我建议这样:
- 有一组
feed:user:{userId}
仅存储 postId。 - 有一组
user:post:{userId}
,其中存储了一组用户的postId
因此,为了“从用户 A 的时间轴中删除用户 B 的所有帖子”,您需要首先执行类似 redis> SMEMBERS user:post:{userBId}
的查询以检索所有 B 的 postId 并将其存储到变量“results
" 然后执行这个命令 ZREM feed:user:{userAId} results