首页 > 解决方案 > Redis 的交集——Where 的类比

问题描述

我有以下结构

user_id: [
{item_id:delivered_at},
{item_id:delivered_at},
{item_id:delivered_at}
]

我需要做的:我有一组用于 user_id 的 item_id 作为参数,我需要检查它们是否已交付。我在这里看到两种方法:

  1. 我只存储key:string,在这种情况下,键将是user_id:item_id和值Delivered_at。因此,当我有 item_id 的数组时,我可以一致地查询所有 item_id(和一个网络请求)以返回每个 item_id(如果存在)的Delivered_at 。
  2. 第二种方法是为每个 user_id 存储一个 zset,key 是user_id,zset 是 score: Delivered_at和 value: item_id

为什么我不喜欢第一种方法——我不能轻易地为提供的用户获取所有项目,这将是非常少的,下一个任务就是这个。

如果我可以将传入的 item_id 集合与 zset 中的集合相交,那将是完美的。据我了解 - 我可以相交集合,但在 redis 中只有 2 个集合,所以在我的情况下,我需要创建新的临时集,然后将它与 zset 中的一个相交。第二种方法有另一种方法-我可以从 zset 获取提供的用户的所有项目,然后在应用程序中相交集,但是我不喜欢这种方式,因为可能有成千上万的用户交付,而且它不是传输几 MB 数据以检查 2 或 3 次交付是个不错的主意。是否有任何选项可以将 INCOMING 集合与 Redis 中已经存在的集合相交?对于这种特定情况,是否有更好的方法来存储数据?我读过一些文章,包括 redis 博客中的二级索引。

标签: data-structuresredisredis-cluster

解决方案


推荐阅读