0

我收藏了大约 15 万部电影,并且我有几个播放列表,其中几部电影多次出现。

我想在 Redis 上缓存电影和播放列表。

我需要的是播放列表只保存对电影的引用,因此当我检索播放列表时,它将带来引用的电影,但如果我更改电影,它将在所有播放列表中更改。

我不想检索只有 id 的播放列表,然后必须再次按 id 检索每部电影,有没有办法直接在一个查询中执行此操作?好像它是一个指针......

谢谢!

4

1 回答 1

2

如我所见,您有两个选择:

  1. 编写一个 lua 脚本,为给定的播放列表提供该播放列表中的所有电影。这种方法的主要缺点是它不适用于集群,因为电影可能位于与播放列表不同的分片上。
  2. 使用 RedisGears ( https://github.com/RedisGears/RedisGears )。在一条 python 行中,您可以完全按照您的需要进行操作,并且它将在集群上完美运行。它看起来像这样(假设播放列表是位于 redis 哈希中的电影的 redis 列表):

    GB().flatmap(lambda r: r).repartition(lambda r:r).map(lambda r: execute('hgetall', r)).run('< playlist_key_name >')

    • flatmap - 每部电影都有记录
    • 重新分区 - 所以每个电影记录都会转到它所在的分片
    • map - 执行 hgetall 并获取电影数据
    • run - run 将自动收集所有分片中的所有数据并返回它们。
于 2020-03-04T14:57:48.883 回答