java - 有序持久缓存

标签 java caching collections mapdb

我需要一个持久缓存,可容纳数百万个 6 字符的 base36 字符串,并具有以下行为: - 当客户端从缓存中检索 N 个字符串时,它们会按照 base36 值的顺序检索,例如AAAAAA 然后是 AAAAAB 等等。 - 检索字符串时,它们也会从缓存中删除,因此其他客户端不会收到相同的字符串。

我目前使用 MapDB 作为我的持久缓存(我会使用 EHCache,但它需要持久存储许可证)。

MapDB 为我提供了一个 Map,我可以在其中放置/获取元素,并处理持久保存到磁盘的操作。

我注意到 Java 的 ConcurrentSkipListMap 类可以帮助解决我的问题,因为它提供排序,而且我还可以调用 pollFirstEntry 方法来按顺序检索/删除元素。

但我不确定如何将其与 MapDB 一起使用。有没有人有任何建议可以帮助我实现我所概述的行为?

谢谢

最佳答案

您所描述的内容听起来不像大多数人所认为的缓存。缓存本质上是一个共享映射,其中键映射到值,并且您永远不会在读取时删除,因为您希望缓存包含最流行的项目(这就是它的用途)。

您所描述的内容(有序的项目集,由客户端按固定顺序消耗)更像是工作队列。与其考虑缓存解决方案,不如尝试使用 RabbitMQ、Kafka、bigqueue 等持久队列。等

关于java - 有序持久缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40095009/

相关文章:

javascript - Backbone.js:如何通过模型 ID 数组过滤对象集合?

java - 在列表中查找不常见元素的最佳方法

java - 在 FXML 中以声明方式设置样式表

java - Lucene TermFrequenciesVector

java - 缓存的可用性

python - 从 Django 缓存中删除所有匹配的键

java - 如何在 Groovy 脚本 - SoapUI 中使用 LinkedHashMap 集合?

java - 在java中将ActionListener合并到MouseMotionListener

java - 并行的 Selenium WebDriver - 关闭 WebDriver 实例会中断其他测试

php - 我的 PHP 脚本缓存(公共(public))友好吗?