在Redis缓存中存储多个数据版本

4
我有一些产品数据,需要在Redis缓存中存储多个版本。这些数据是JSON序列化的。获取基本数据的过程很昂贵,将其定制为不同版本的过程也很昂贵,因此我希望尽可能地优化缓存所有版本。假设定制是基于单个参数的,并且可以将该参数作为缓存键的一部分使用。
我计划使用的检索产品数据的过程如下:
if cache contains appropriately customised data for this parameter
    return customised data from cache
else
    if cache contains basic data
        get basic data from cache
    else
        get basic data from primary data source (expensive)
        save basic data to cache for next time

apply customisations to basic data (expensive)
save customised version to cache, using the parameter as a key
return customised product

这一切都很顺利,但现在我正在尝试找出在基础数据源更改时使缓存数据失效的最佳方法。如果基本产品信息发生变化,则所有定制版本也需要过期。当需要进行此操作时,我将收到通知。
请注意,用于自定义产品的参数不易枚举。可能存在大量的参数,因此无法遍历所有可能的键。
Redis似乎没有提供使用通配符过期多个键的能力,并且在查看Redis模式时,我不确定我的方法是否正确。
是否有更好的方式在Redis中缓存此类定制的、半分层数据,以便可以使其过期?

您可以使用哈希表来存储产品数据/文档的所有版本。要使其无效,只需删除该键(并且其中存储的所有版本将一次性消失)。 - Itamar Haber
1
谢谢!这正是我在寻找的。如果您将您的评论转化为答案,我会接受它。 - John
1个回答

1

Redis的哈希表非常适合您的需求。您可以将每个产品的版本存储为该产品哈希键中字段的值。例如:

HSET id:14 1 "{your JSON data v1}"

获取版本只需调用HGET并提供产品的键和相关字段。要使其无效,可以使用DEL和/或EXPIRE来删除整个哈希表。

谢谢。我也意识到我在这个问题中概述的情况只是第一步 - 我在另一个问题中描述了一个更复杂的情况。 - John

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接