【发布时间】:2010-12-29 04:31:14
【问题描述】:
我正在使用 EhCache 的装饰器 SelfPopulatingCache,当缓存尝试加载新条目时出现问题,但它不存在(即它不存在于数据库中)。因此缓存会将null 值放入缓存中,以解除对键的任何其他获取的阻塞,但是下一个线程将执行相同的数据库调用,因为它从缓存中接收到“null”。这意味着它认为需要加载该条目 - 即使实际上它是空的,因为数据不存在于任何地方。我觉得我做错了什么。
(伪代码)
Value v = cache.get(key); // multiple threads will block here
if (v == null)
cache.put(key, getValueFromDB()); // this might put a null value
我目前的解决方案是不放空,而是放一个占位符Object并检查它。
Value v = cache.get(key);
if (v == null)
cache.put(key, getValueFromDB());
else if (v == NOENTRYOBJECT)
return null;
else
return v;
想法?
【问题讨论】:
-
我不清楚您的伪代码与
SelfPopulatingCache有何关系。你是怎么用的? -
cache = SelfPopulatingCache (or BlockingCache) ... 认为这很清楚