【发布时间】:2016-04-20 20:07:30
【问题描述】:
我有一些产品数据需要在 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 中缓存这种自定义的半分层数据,使其可以过期?
【问题讨论】:
-
您可以使用哈希来存储产品数据/文档的所有版本。要使其无效,只需删除该密钥(其中存储的所有版本都将一举消失)。
-
谢谢!这正是我正在寻找的。如果您将评论变成答案,我会接受。