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

标签 caching 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 中缓存这种定制的、半分层的数据,使其可以过期?

最佳答案

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

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

获取一个版本就是调用HGET与产品的关键和相关领域。无效,DEL和/或 EXPIRE整个哈希。

关于caching - 在 Redis 缓存中存储多个版本的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36741096/

相关文章:

c# - 以编程方式清除 win 7 中的图标缓存 - 使用 C# 或 Visual Basic 执行 ie4uinit.exe-ClearIconCache

java - @Cacheable 带有 null 键

asp.net - 使用 IIS8.5 的浏览器缓存,我做得对吗?

Redis Db - 观察键是否存在或已创建

python - 用于单个接收者的 Redis 发布/订阅

javascript - 内存中的MongoDB缓存集合?

java - Play框架缓存存储在哪里?

redis - 优化性能缓慢的 Redis 数据库

python - 使用 python-rq 在远程服务器上执行长任务

mysql - Redis 比 MySQL 快吗?