node.js - 在redis中有效地缓存搜索结果

标签 node.js caching redis

我需要一种方法来缓存我的 node.js 应用程序上的搜索。我有一个使用 redis 的想法,但我不确定如何实现它。

我想做的是对要缓存的搜索次数有一个硬性限制,因为我的 RAM 数量有限。对于每次搜索,我想存储搜索查询和相应的搜索结果。

假设我对缓存的搜索数量的硬性限制是 4。每个搜索查询都是下图中的一个框:

enter image description here

如果有未缓存的新搜索,新搜索将被推到顶部,底部的搜索查询将被删除。

enter image description here

但是如果有缓存的搜索,缓存的搜索查询将从其位置删除并添加到缓存的顶部。例如,如果搜索了 search 3

enter image description here

通过这样做,我使用了相对相同数量的内存,而搜索次数最多的查询将始终在缓存中 float ,而不太受欢迎的搜索将通过缓存并被删除。

我的问题是,我究竟该怎么做?我想我可能已经能够用列表来做到这一点,但我不确定你如何检查列表中是否存在一个值。我还认为我可以使用排序集来做到这一点,我会将集合的分数设置为索引,但是如果搜索查询在缓存中移动,我将需要更改每个分数集合中的元素。

最佳答案

对你来说最简单的是启动新的 redis 实例来处理搜索缓存。对于此实例,您可以根据需要设置最大内存。然后将此实例的 maxmemory-policy 设置为 allkeys-lru。通过这样做,redis 将自动删除最近最少使用的缓存条目(这是你想要的)。此外,您将真正受到内存使用量的限制,而不是缓存条目的最大数量。

对于这个 redis 实例,您将插入键为:search:$seachterm => $cachedvalue 并为此键设置过期几分钟(例如,您不会提供过时的答案) .通过这样做,redis 将为您完成艰苦的工作。

关于node.js - 在redis中有效地缓存搜索结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10484472/

相关文章:

node.js - 在 Azure 上部署 Angular2 应用程序时出现 Node 版本错误

javascript - Heroku 在 heroku (Node.js) 上找不到本地模块

ruby-on-rails - 查明 resque 作业是否仍在运行,如果卡住则终止它

http - 条纹 1.5 : running on Tomcat - best way to control HTTP (cache-control) headers?

node.js - MongoDB - Mongoose,在嵌套查询中添加新文档数据

javascript - 在 Node.js 中从 Web 运行一个库

java - 为什么我的项目中EhCache还在下载和初始化

java - 如何将 netty Channel 对象存储在 Redis 数据库或任何其他解决方案中?

ruby-on-rails - rails i18n redis ERR 未知命令 [] railscast 256

python - Redis python中的HashMap过期?