java - WeakReference 是我需要的吗?

标签 java caching weak-references

我正在开发一个订购系统,这是我的场景:我有一个类以“缓存”策略之类的方式保存新订单。此时,我使用的是这样的HashMap:

public static final Map<Long, Order> orders = new HashMap<Long, Order>();

我通过long唯一标识订单(它不是来自数据库,它只是一个递增变量)。我不从数据库中保存它的原因是,例如:员工正在注册来自电话的订单,突然客户不想再订购了,这样我就不会用无用的数据填充我的数据库登记。基于此,我正在寻找一种方法来保存所有订单并“自动清理”不再使用的索引。

我看过WeakReference,但我不知道这是否是我真正需要的。我愿意接受任何建议。

提前致谢。

最佳答案

您不需要为此使用WeakReference。 WeakReference 用于在内存中缓存大型对象(例如图像),并且您希望指示垃圾收集器在可用内存变得稀疏时可以删除该图像的情况。在这种情况下,您稍后可以随时从磁盘重新加载图像,因此您不必关心它是否从内存中删除。

对于您的情况,我将使用普通的HashMap。一旦客户确认他们确实想要该订单,您就可以将其保存到数据库中。

如果客户不想要该订单,则只需将其从 HashMap 中删除 - 这是一个非常便宜的操作。

编辑:

您可能还在寻找“定时缓存”。类似 HashMap 的东西会在一定时间后自动过期任何键/值。 Google的Guava有这样的数据结构。请参阅related SO question .

关于java - WeakReference 是我需要的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30090262/

相关文章:

java - 编辑字符串中的结果等于 false

python - 如何为特定的 @cache_page 指定 KEY_FUNCTION

c# - .Net 缓存过期

c# - 是否可以 Hook GC 收集的对象?

java - 在 StringBuffer append 中对单字符值使用字符而不是 String

java - 如何使用 AJAX 查询动态填充 Google Chart,获取 DOM 异常 8

java - 有没有办法在 Java 中强制对弱和/或软引用对象进行 GC?

python - 为什么在使用 __slots__ 时 __weakref__ 默认被移除?

java - 如何使这个 "cleaner"

caching - Cassandra:激活列族的行缓存似乎失败