【问题标题】:How to query for multiple keys in-memory cache in Java?如何在 Java 中查询多个键的内存缓存?
【发布时间】:2019-02-25 12:42:20
【问题描述】:

我在 rdms 和 csv 文件中有一些持久性数据(它们是独立的对象,但我想提一下,因为它们位于不同的介质中, 我不能使用 rdbms 提供的东西,实际上我不想在接下来的一个小时内访问数据库,即使数据变旧了)。我需要将数据存储在内存中以获得性能优势并查询(仅读取,无其他操作)基于它的多个列的对象,并每小时刷新一次数据。

在我的情况下,除了实现我自己的对象存储和查询方法之外,还有什么好方法来存储和查询内存中的对象?例如,您能否提供一个示例/链接来将 sql 查询替换为

select * from employees where emplid like '%input%' or surname like  '%input%' or email like  '%input%';

对于虚拟查询很抱歉,但它解释了可能的查询类型。

【问题讨论】:

  • 可能是像 Spring 或 Hibernate 这样的 ORM,但不确定它们是否支持 CSV。个人喜欢直接jdbc/etc的控制
  • 内存缓存解决方案有很多:Apache ignite、hazelcast、Oracle coherence等

标签: java caching


【解决方案1】:

去为自己寻找一个具有所需功能的密钥库实现。使用您的查询字符串作为键和结果作为值。 https://github.com/ben-manes/caffeine 有很多功能,包括记录超时(比如一个小时)。

对于我自己的工作,我使用了一个 LRU 密钥库(仅限于 X 个条目),其中包含带有超时信息的对象,并且我在使用之前手动确定记录是否过时。 LRU 基本上是一个链表,它将“读取”记录移动到列表的头部,并在添加的记录超出最大所需大小时丢弃尾部。这样可以让热门唱片在店里保存更久。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-15
    • 2013-06-28
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    相关资源
    最近更新 更多