我应该在 Redis 中设置“常量”结果缓存的过期时间吗?

Posted

技术标签:

【中文标题】我应该在 Redis 中设置“常量”结果缓存的过期时间吗?【英文标题】:Should I set expiration on caches of "constant" results in Redis? 【发布时间】:2021-12-25 00:56:21 【问题描述】:

我有几个查询返回绝对恒定响应的数据库,即该数据库中的某些条目在写入后从未更改。

我想知道我是否要使用 Redis 对它们进行缓存,我应该设置过期时间吗?

这样做的利弊 -

优点:用户将始终受益于缓存(第一个查询除外)

缺点:要查询的这些条目的数量正在增加。所以 Redis 最终会使用越来越多的内存。

编辑

为了提供更多上下文,查询运行速度很慢。他们每个人都可能需要几秒钟。尽量减少遇到这种情况的用户数量是有益的。

此外,这些结果中的每一个都具有大约几 kB 的大小;条目的数量(不是大小)可能每分钟增加 1 个。

【问题讨论】:

【参考方案1】:

很抱歉回答问题。仍在等待足够的声誉来评论和澄清。

回答您的直接问题:

您期望的查询数量是无限的吗? 否:您可以通过在启动时触发查询并保留在缓存中来改善首次用户体验。预计会改变的其他响应可以附加一个 TTL 并在配置中使用以下任何 maxmemory-policy 设置:volatile-ttlallkeys-lru、'volatile-lfu, or volatile-random` 仅驱逐键带有 TTL。

是的:通过附加 TTL 并在每次请求时更新以尽可能长时间地保留在缓存中并使用最适合您的其余用例的任何内存管理策略来确定这些的优先级。

相关问题:

如果这些确实是静态值,为什么要查询数据库而不是从一个生成的常量平面文件中读取并在启动时读取?

您是否尝试过优化查询?

【讨论】:

以上是关于我应该在 Redis 中设置“常量”结果缓存的过期时间吗?的主要内容,如果未能解决你的问题,请参考以下文章

Redis中设置过期实践key

在Redis中设置了过期时间的Key,需要注意哪些问题?

如何在节点redis中设置hmset的过期时间?

java操作Redis缓存设置过期时间

setnx设置时间,再次设置

Django 项目中设置缓存