一个关于缓存管理的问题

2021-03-30 20:14:36 +08:00
 c137rick
**********************************************************
*                     一块固定大小的内存                   *
*                                                        *
*                                                        *
*     ****************             *******************   *
*     *      A       *             *       B         *   *
*     * 。     。。。 *             *                 *   *
*     *     。。     *             *    。。。        *   *
*     *   。。。。。  *             *          。     *   *
*     *  。  。。。   *             *  。。           *   *
*     *              *             *                 *   *
*     ****************             *******************   *
*                                                        *
**********************************************************

如上图所示,A 和 B 是两个缓存管理器,他们共用同一块固定大小的内存。

两个缓存管理器 A 和 B 都会缓存不同类型的数据。当向 A 中缓存数据时,如果内存不足会按照一定策略从 A 中淘汰掉一些缓存。B 也一样。

每次缓存的数据大小可能不一样,可能大,也可能小。

现在的问题是,A 中的缓存太多了,导致内存剩余的太少,当 B 中要加入一个缓存项的时候就必须淘汰掉 B 中的其它的缓存项。这样就会导致 B 中的缓存淘汰过于频繁。

在不增加内存的情况下,如何缓解这种情况?

我的想法是设立某种统计量(如平均每添加多少次缓存会触发一次淘汰),超出某个范围后就自动从 A 和 B 中各淘汰掉一定比例的内存。

大家有什么好的办法?

673 次点击
所在节点    问与答
2 条回复
billlee
2021-03-30 23:42:52 +08:00
为什么要这样搞呢?这种问题 ZFS on Linux 都没解决
killergun
2021-03-31 09:06:29 +08:00
A,B,你在把内部细分为存储不同大小的块。我感觉淘汰就是用新数据覆盖旧数据,感觉这个就是会频繁写,还好,主要是内存碎片问题。你可以研究下 GC 相关算法。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/766640

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX