一尘不染

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

redis

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


阅读 961

收藏
2020-06-20

共1个答案

一尘不染

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

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

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

2020-06-20