为ID和Json对象列表构建缓存结构

时间:2019-01-08 02:31:48

标签: python json caching redis memcached

我正在寻找一种更有效的缓存结构,用于网站上用户图像的个人资料提要。此供稿已分页。因此,我在数据库和缓存中选择的内容都将使用偏移量/页码。

我的代码在Python中,而缓存系统在Redis中。我正在使用分页检索ID的偏移量,将其缓存,然后使用这些ID从数据库中检索JSON Blob对象。

构建图像供稿涉及两种类型的表。有“对象”表包含ID,JSON Blob和时间戳,然后有“映射”表包含ID从一个对象表到另一个对象表的映射。例如:

用户(对象表)

  • id
  • 用户名
  • 数据(JSON)
  • 日期(时间戳)

图像(对象表)

  • id
  • 数据(JSON)
  • 日期(时间戳)

user_has_images(映射表)

  • user_id
  • image_id
  • 日期(时间戳)

要构建供稿,我们将执行以下操作:

  1. 从“用户”表中获取user_id(基于网址中的用户名)。
  2. 使用user_iduser_has_images获取图像ID。
  3. 使用图像ID从images
  4. 获取图像json对象。

此过程的每个部分都被缓存。该缓存结构当前如下所示:  1.用户对象作为单个对象缓存。  2.查看了第1页,User_has_images映射被缓存为user_profile_ids:{user_id}:{page_number}  3.使用键user_profile_images:{page_number}

将图像对象作为一个json对象作为一个列表缓存。

这种结构的问题在于,如果用户对其图像之一进行编辑,则直到图像对象缓存过期后,该编辑内容才会出现在网站上。

缓存越长,用户等待观看缓存的时间就越长,然后用户会质疑他们对网站的操作是否有效。

这是我针对该问题的两个潜在解决方案:

  1. 使多个缓存过期。。每次用户对其Image对象进行编辑时,我们都会尝试查找该图像可能存在的缓存,然后使该缓存过期或对其进行更新。不利的一面是网站上有很多不同的提要,在任何给定时间我们都不知道图像位于哪个提要中,因为没有引用实际图像的ID。
  2. 分别缓存图像对象。我们将每个图像对象分别存储在缓存中,以便我们可以通过image_id查找它们。检索到user_id => image_id配对后,我们将使用image_id在缓存中查找每个图像对象。当用户对图像对象进行编辑时,如果它仍在缓存中,则只需在一个缓存位置中对其进行更新。潜在的不利之处是,如果请求提供图像的提要,并且realistic = Image对象不在高速缓存中,则需要在数据库中查找该图像(不确定是否经常发生)。第二个潜在的缺点是,如果单个图像对象出现在多个提要中,则该图像对象的过期时间(也许不会有问题吗?)。

有什么想法或建议吗?

0 个答案:

没有答案