Redis缓存标签刷新内存泄漏

时间:2018-09-06 09:05:58

标签: laravel caching redis

我们使用Laravel提供的Redis标记缓存以这种方式缓存模型的查询结果:

cache()->tags([model1, model2...])->remember(sql_query_hash, result_callback)

,如果在示例中,一段时间后,用户达到示例model1中的标签之一,有500k唯一的缓存查询,并且有更新,则需要这样做:

cache()>tags([model1])->flush();

我的工作被允许耗尽内存,对于工作人员,我们有128MB的内存。是的,我知道是否要增加工作人员的内存,我可以先刷新然后再按1kk键,等等。但这不是正确的方法,因为我们的用户数量呈指数级增长,我们的项目也将增长,因此也许某些标签在用户高峰时会有10kk键,那么我又该如何刷新标签缓存?

https://github.com/laravel/framework/blob/5.7/src/Illuminate/Cache/RedisTaggedCache.php#L174

这是laravel刷新标签键的方式,方法是检索内存中的所有内容,然后再次将其分块在内存中,以便此array_chunk在获取所有键后将内存使用量翻倍,然后执行Redis :: del操作以删除此标签的缓​​存键。

我不知道它怎么称呼它是一个错误,但是对我来说,有人需要解决这个问题的人吗?也许还有一些解决方案?

0 个答案:

没有答案