我需要一个持久缓存,最多可容纳数百万个6字符的base36字符串,并具有以下行为: - 当客户端从缓存中检索N个字符串时,它们按照base36值的顺序检索,例如: AAAAAA然后AAAAAB等 - 检索字符串时,它们也会从缓存中删除,因此其他客户端不会收到相同的字符串。
我目前正在使用MapDB作为我的持久缓存(我使用的是EHCache,但它需要持久存储许可证)。
MapDB为我提供了一个可以放置/获取元素的Map,它处理持久化到磁盘。
我注意到Java的ConcurrentSkipListMap
类会对我的问题有帮助,因为它提供了排序,我也可以调用pollFirstEntry
方法来按顺序检索/删除元素。
我不知道如何在MapDB中使用它。有没有人有任何建议可以帮助我实现我所概述的行为?
由于
答案 0 :(得分:1)
您所描述的内容听起来并不像大多数人认为的缓存。缓存本质上是一个共享映射,其中键映射到值,并且您永远不会删除读取,因为您希望缓存包含最受欢迎的项目(这就是它的用途)。
您所描述的内容(客户按固定顺序使用的有序项目集)更像是工作队列。而不是查看缓存解决方案,尝试像RabbitMQ,Kafka,bigqueue等持久队列。