我需要一个持久缓存,可容纳数百万个 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/