我想实现一个 Redis 缓存,它应该能够基于标签使键失效。
例如,要缓存一个帖子列表查询,缓存看起来像
{
"posts:name=lorem": [
{ id: 1, name: "Lorem ipsum dolor.." },
{ id: 2, name: "Lorem ipsum dolor.." },
],
"tags:post:1": ["posts:name=lorem"],
"tags:post:2": ["posts:name=lorem"]
}
以开头的条目tags
包含一组缓存键,其中存在给定的实体,因此要使特定帖子的缓存无效,我将获取其标签并del
为所有它们触发查询。
我正在努力解决的部分是驱逐政策。通常,allkeys-lru
首选是 ,但是,我需要确保在查询仍在缓存时标签不会随机消失,因为如果 redis 驱逐tags:post:1
,我将无法使其缓存无效。
我看了看,volatile-ttl
以为我ttl
在数据上设置为 3h,但在标签上设置为 4h,这样 Redis 应该更喜欢将标签保留更长时间,但是这lru
部分不起作用。我觉得这有一些隐藏的问题。
我该怎么办?我曾考虑将标签保存在单独的数据库中,但驱逐策略是针对每个实例,而不是针对每个数据库。
我应该将标签存储在单独的实例中吗?