Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Caching 在Redis缓存中存储多个版本的数据_Caching_Redis - Fatal编程技术网

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

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

我有一些产品数据需要存储在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中缓存这类定制的半分层数据,使其可以过期?

Redis'哈希可以满足您的需要。可以将每个产品的版本存储为该产品的哈希键中的字段值。例如:

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

获取版本只是调用产品的密钥和相关字段。使无效和/或整个哈希。

您可以使用哈希存储产品数据/文档的所有版本。若要使其无效,只需删除该密钥(其中存储的所有版本都将一下子消失)。谢谢!这正是我要找的。如果你把你的评论变成回答,我会接受的。谢谢。我还意识到,我在这个问题中概述的情景只是第一步——我遇到了一个更复杂的情况。