缓存更新策略

问题描述 投票:0回答:1

假设一个表存储文章信息:

id  title
----------
1   Github Setup Guide
2   Github Troubleshooting
3   New Engineer Onboarding Setup

有一个查询经常尝试查找包含某个单词的文章,例如:

SELECT id FROM article WHERE title like '%Setup%'

为了提高性能,我们添加了缓存来存储

keyword -> article_ids

Setup -> [1, 3]
Github -> [1, 2]

因此,当用户尝试查找所有包含

Setup
的 id 时,将直接返回 [1,3]。

问题是,当表数据发生变化时,比如删除一条记录时,如何更新缓存?

我能想到的两个选择:

  1. 对于“标题”中的每个单词,在缓存中找到它,删除数组中的id,并将更新后的数组设置回缓存
  2. 清除缓存

第一个选项看起来很合理,但是如果标题中有很多单词,或者结果数组很大,则更新缓存可能会很耗时。而且逻辑有点复杂。

有没有更好的方法来更新缓存?

caching redis
1个回答
0
投票

正如您所说,当标题更改时,您需要

  • 遍历旧标题中的单词并更新倒排索引
  • 遍历新标题中的单词并更新倒排索引

是否这样做或重新索引所有内容取决于文档的数量、唯一单词和标题长度。

作为替代方案 - 您是否知道Redis Stack具有搜索和查询功能,支持全文搜索

© www.soinside.com 2019 - 2024. All rights reserved.