在redis中有效缓存搜索结果

naf*_*fis 5 caching redis node.js

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

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

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

在此输入图像描述

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

在此输入图像描述

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

在此输入图像描述

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

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

any*_*dot 4

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

在此 Redis 实例中,您将插入密钥为:search:$seachterm => $cachedvalue并为此密钥设置过期时间(例如,您不会提供过时的答案)。通过这样做,redis 将为你做艰苦的工作。