Node.js Redis 过期与新鲜内容
Node.js Redis expiry vs fresh content
我有一个分类广告网站 craigslist.org - 只是规模小得多。
我是 运行 MongoDB 并在 Redis 中缓存所有 API 请求,其中 Mongo 查询是键,值是 Mongo数据库结果文档.
伪代码:
// The mongo query
var query = {section: 'home', category: 'garden', 'region': 'APAC', country: 'au', city: 'sydney', limit: 100}
// Getting the mongo result..
// Storing in Redis
redisClient.set(JSON.stringify(query), result);
现在用户在同一类别中创建了一个新的 post,但是 Redis 现在提供了一个过时的记录,因为 Redis 不知道数据集已经更改。
我们如何克服这个问题?
我可以在一般情况下或在那个特定的键上设置一个过期时间,但基本上内存缓存的键需要在用户为结果集将包含新的键创建新的 post 的那一刻过期已创建记录。
一种方法是遍历所有 Redis 键,并提出一种模式,根据新创建记录的特征来检测应删除哪些键。只是这个方法好像"too clever"不太对
因此我们希望在立即提供新内容的同时进行内存缓存。
我会避免将批量查询结果缓存为单个键。 Redis 适用于需要以非常高的频率访问和更新数据的用例,以及可以从散列、集合、列表、字符串或排序集合 [1] 等数据结构中受益的用例。另外,请记住 MongoDB 已经将部分数据库缓存在内存中,因此您可能看不到太多性能提升。
更好的方法是单独缓存每个 post。您可以 add keys to sets 将它们分组到类别或什至只是页面(例如用户希望在每个页面上看到的 20 个左右 post)。这样,每次用户创建新的 post 或更新现有的时,您也可以更新 Redis 缓存中的相应键。
我有一个分类广告网站 craigslist.org - 只是规模小得多。
我是 运行 MongoDB 并在 Redis 中缓存所有 API 请求,其中 Mongo 查询是键,值是 Mongo数据库结果文档.
伪代码:
// The mongo query
var query = {section: 'home', category: 'garden', 'region': 'APAC', country: 'au', city: 'sydney', limit: 100}
// Getting the mongo result..
// Storing in Redis
redisClient.set(JSON.stringify(query), result);
现在用户在同一类别中创建了一个新的 post,但是 Redis 现在提供了一个过时的记录,因为 Redis 不知道数据集已经更改。
我们如何克服这个问题?
我可以在一般情况下或在那个特定的键上设置一个过期时间,但基本上内存缓存的键需要在用户为结果集将包含新的键创建新的 post 的那一刻过期已创建记录。
一种方法是遍历所有 Redis 键,并提出一种模式,根据新创建记录的特征来检测应删除哪些键。只是这个方法好像"too clever"不太对
因此我们希望在立即提供新内容的同时进行内存缓存。
我会避免将批量查询结果缓存为单个键。 Redis 适用于需要以非常高的频率访问和更新数据的用例,以及可以从散列、集合、列表、字符串或排序集合 [1] 等数据结构中受益的用例。另外,请记住 MongoDB 已经将部分数据库缓存在内存中,因此您可能看不到太多性能提升。
更好的方法是单独缓存每个 post。您可以 add keys to sets 将它们分组到类别或什至只是页面(例如用户希望在每个页面上看到的 20 个左右 post)。这样,每次用户创建新的 post 或更新现有的时,您也可以更新 Redis 缓存中的相应键。