我正在寻找一种更有效的缓存结构,用于网站上用户图像的个人资料提要。此供稿已分页。因此,我在数据库和缓存中选择的内容都将使用偏移量/页码。
我的代码在Python中,而缓存系统在Redis中。我正在使用分页检索ID的偏移量,将其缓存,然后使用这些ID从数据库中检索JSON Blob对象。
构建图像供稿涉及两种类型的表。有“对象”表包含ID,JSON Blob和时间戳,然后有“映射”表包含ID从一个对象表到另一个对象表的映射。例如:
用户(对象表)
图像(对象表)
user_has_images(映射表)
要构建供稿,我们将执行以下操作:
user_id
(基于网址中的用户名)。user_id
从user_has_images
获取图像ID。images
此过程的每个部分都被缓存。该缓存结构当前如下所示:
1.用户对象作为单个对象缓存。
2.查看了第1页,User_has_images
映射被缓存为user_profile_ids:{user_id}:{page_number}
3.使用键user_profile_images:{page_number}
这种结构的问题在于,如果用户对其图像之一进行编辑,则直到图像对象缓存过期后,该编辑内容才会出现在网站上。
缓存越长,用户等待观看缓存的时间就越长,然后用户会质疑他们对网站的操作是否有效。
这是我针对该问题的两个潜在解决方案:
image_id
查找它们。检索到user_id => image_id
配对后,我们将使用image_id
在缓存中查找每个图像对象。当用户对图像对象进行编辑时,如果它仍在缓存中,则只需在一个缓存位置中对其进行更新。潜在的不利之处是,如果请求提供图像的提要,并且realistic = Image对象不在高速缓存中,则需要在数据库中查找该图像(不确定是否经常发生)。第二个潜在的缺点是,如果单个图像对象出现在多个提要中,则该图像对象的过期时间(也许不会有问题吗?)。有什么想法或建议吗?