基于Java的缓存队列,具有预定义生存时间的企业

时间:2016-08-20 18:54:12

标签: java caching data-structures queue guava

我在以下场景中需要它:

1.从网络连续接收数据。 2.收到的数据被添加到队列缓冲区。

在队列缓冲区中添加的数据将具有预定义的TimeToLive。 如果我在队列中添加Data1,它可以活到X秒。

Guava提供基于时间的缓存,但它是基于密钥的,不是有序的。对于我在数据库中插入数据时的排序非常重要,因为我想要轮询和处理数据。

如果有人知道可能已订购的某些现有库/缓存api,请分享基于时间的驱逐实施。

2 个答案:

答案 0 :(得分:0)

如果我没记错的话,我也有类似的问题,发现番石榴在这一点上也不够用。

也许您可以将数据存储在简单队列中,只存储对缓存中项目的引用。 在参考缓存上使用处理程序,您可以在它们过期时收到通知,然后手动从数据队列中删除被驱逐的项目。

答案 1 :(得分:0)

您似乎不需要任何缓存。

拉出条目时,检查它是否仍然存在并处理或丢弃。如果你想节省内存,做一些定期剔除(通过拉动和过滤所有元素)。

滥用任何缓存只会让情况变得更糟:

  • 额外的内存和时间开销
  • 依赖于精确驱逐算法,其中缓存针对缓存进行了优化,而不是驱逐您想要的方式
  • 从队列的某个随机位置按缓存指示的顺序删除时的速度问题(这可以使用home brew双链表有效地完成,但这是另一个复杂和内存浪费)。