V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
c137rick
V2EX  ›  问与答

一个关于缓存管理的问题

  •  
  •   c137rick · 2021-03-30 20:14:36 +08:00 · 721 次点击
    这是一个创建于 1339 天前的主题,其中的信息可能已经有所发展或是发生改变。
    **********************************************************
    *                     一块固定大小的内存                   *
    *                                                        *
    *                                                        *
    *     ****************             *******************   *
    *     *      A       *             *       B         *   *
    *     * 。     。。。 *             *                 *   *
    *     *     。。     *             *    。。。        *   *
    *     *   。。。。。  *             *          。     *   *
    *     *  。  。。。   *             *  。。           *   *
    *     *              *             *                 *   *
    *     ****************             *******************   *
    *                                                        *
    **********************************************************
    

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

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

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

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

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

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

    大家有什么好的办法?

    2 条回复    2021-03-31 09:06:29 +08:00
    billlee
        1
    billlee  
       2021-03-30 23:42:52 +08:00
    为什么要这样搞呢?这种问题 ZFS on Linux 都没解决
    killergun
        2
    killergun  
       2021-03-31 09:06:29 +08:00
    A,B,你在把内部细分为存储不同大小的块。我感觉淘汰就是用新数据覆盖旧数据,感觉这个就是会频繁写,还好,主要是内存碎片问题。你可以研究下 GC 相关算法。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3899 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 00:55 · PVG 08:55 · LAX 16:55 · JFK 19:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.