Java 基于缓存队列的条目具有预定义的生存时间
Java based caching queue having enteries with predefined time to live
我在以下情况下需要它:
1.Data 从网络连续接收。
2.The 接收到的数据被添加到队列缓冲区中。
添加到队列缓冲区中的数据将具有预定义的 TimeToLive。
如果我在队列中添加 Data1,它最多可以存活 X 秒。
Guava 提供基于时间的缓存,但它是基于键的,而不是ordered.For我在将数据插入缓存时对其进行排序很重要,因为我想轮询和处理数据。
如果有人知道一些现有的 library/cache api 可能已经下令执行基于时间的驱逐实施,请分享。
如果我没记错的话,我也遇到过类似的问题,并且发现番石榴在这一点上也不足。
也许您可以将数据存储在简单的队列中,而只将对项目的引用存储在缓存中。
在引用缓存上使用处理程序,您可以在它们过期时收到通知,然后从数据队列中手动删除逐出的项目。
您似乎不需要任何缓存。
提取条目时,检查它是否仍然存在并处理或删除它。如果你想节省内存,做一些周期性的剔除(通过提取和过滤所有元素)。
滥用任何缓存只会使情况变得更糟:
- 额外的内存和时间开销
- 依赖于精确的逐出算法,其中缓存针对缓存进行了优化,而不是按照您想要的方式逐出
- 按照缓存指定的顺序从队列的某个随机位置删除时出现速度问题(这可以使用自制双链表有效地完成,但这是另一个复杂性和内存浪费)。
我在以下情况下需要它:
1.Data 从网络连续接收。 2.The 接收到的数据被添加到队列缓冲区中。
添加到队列缓冲区中的数据将具有预定义的 TimeToLive。 如果我在队列中添加 Data1,它最多可以存活 X 秒。
Guava 提供基于时间的缓存,但它是基于键的,而不是ordered.For我在将数据插入缓存时对其进行排序很重要,因为我想轮询和处理数据。
如果有人知道一些现有的 library/cache api 可能已经下令执行基于时间的驱逐实施,请分享。
如果我没记错的话,我也遇到过类似的问题,并且发现番石榴在这一点上也不足。
也许您可以将数据存储在简单的队列中,而只将对项目的引用存储在缓存中。 在引用缓存上使用处理程序,您可以在它们过期时收到通知,然后从数据队列中手动删除逐出的项目。
您似乎不需要任何缓存。
提取条目时,检查它是否仍然存在并处理或删除它。如果你想节省内存,做一些周期性的剔除(通过提取和过滤所有元素)。
滥用任何缓存只会使情况变得更糟:
- 额外的内存和时间开销
- 依赖于精确的逐出算法,其中缓存针对缓存进行了优化,而不是按照您想要的方式逐出
- 按照缓存指定的顺序从队列的某个随机位置删除时出现速度问题(这可以使用自制双链表有效地完成,但这是另一个复杂性和内存浪费)。