java - 如何在 5 分钟后自动从内存中释放数据表

标签 java database caching

我有一个 TableHandler 实现表加载/重新加载逻辑。所谓表格,是指当用户以表格对象的形式请求时,我从磁盘或内存中加载的数据。如果一个新请求到达并且表的实例在内存中,那么我只是从内存中加载表而不是从磁盘重新加载它。如果我正在寻找的表不在内存中,我只是从光盘加载表。现在随着我的请求增加,很多表都存储在内存中,所以我想在 5 分钟后自动从内存中释放一些表,这些表在 5 分钟内没有被超过。我该如何实现? 我有这样的 tablehandler 类结构

final class TableHandler{

   /*
   Data struct for storing information required for management 
   of the loaded table    instances
   */

    final static class Tableinfo{

       /*
       Table instance.. and other things like table when 
       last modified and whether to referench the table 
       when a next request arrives.
       */

    }

    getTable(){someInternalTableHandler.getTable()}

    replacetable {someInternalTableHandler.replacetable()}

    //Handles loading/reloading logic.

    final static class someInternalTablehandler{

        getTable(){...}
        createTableInstance(){...}
        replaceTable{...}

    } 
}

如何在我的代码中实现上述逻辑......??

最佳答案

这听起来很像内存中的表缓存。查看 Java 缓存解决方案,如 EHCache,它解决了这个问题以及更多问题。

如果您想自己做,请在您的 Tableinfo 类中添加时间戳以存储上次访问时间。然后按照 jzd 的建议使用计时器任务遍历 TableInfo 列表以查找必须“卸载”的那些。

检查 here有关使用 Timer 和 TimerTask 的示例

关于java - 如何在 5 分钟后自动从内存中释放数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5393833/

相关文章:

sql - 在一个表中有不同用户的记录 - SQL Server

linux - 在 Debian Wheezy Web 服务器上禁用文件缓存

java - 如何将此 FOR 循环转换为 WHILE 循环,以便它也计算辅音? (Java)

Java监控单元测试的内存使用情况

java - 我们可以像在本例中那样仅使用 List 及其大小来检查复杂的条件吗?

java - 二级缓存 + Spring Boot + Java Hibernate 中的问题

caching - 如何在 IIS 中设置静态资源的 HTTP header 中的到期日期或最长期限

java - 如何在使用表面 View 录制视频时拍照(快照)

mysql - 按特定列的数据自动递增

java - 在 sqlite 数据库中插入信息不起作用