我有这段代码
//net.sf.jsr107cache.Cache, CacheException, CacheFactory, CacheManager all imported
private static Cache getCache() {
Cache cache = null;
try {
CacheFactory cacheFactory = CacheManager.getInstance().getCacheFactory();
cache = cacheFactory.createCache(Collections.emptyMap());
} catch (CacheException e) {
Logger.getLogger(MemcacheUtil.class.getName()).log(Level.SEVERE,
"Unable to obtain a cache instance! \n" + e.getMessage());
}
return cache;
}
并像这样使用
public static byte[] fetchFromMemcache(String key) {
return (byte[]) getCache().get(key);
}
public static void saveInMemcache(String key, byte[] value) {
getCache().put(key, value);
}
但令人讨厌的是,没有任何内容存储在Memcache中,也没有打印日志消息。在使用JCache实现缓存之前,我使用了低级API并且也遇到了同样的问题。我真的很困惑。是否有任何特殊设置(在代码中,在appengine控制台上等)需要在Memcache工作之前完成? Memcache是不是很自然地恨我?是否有一些我正在做的(或没有做的)代码导致所有这些?我想知道如何解决这个问题。谢谢!
答案 0 :(得分:0)
在使用低级API使用Memcache之前,不需要设置特殊设置(在代码中或在appengine控制台上)。
我没有问题地使用这个API。
(如果你愿意,明天我可以给你用来与memcache成功交换数据的代码。
答案 1 :(得分:0)
这是一个提供静态方法的类的示例,该方法使用低级API从Memcache写入/读取。 优点是我使用缓存的单例实例,提供更好的响应时间。您正在为每个请求创建工厂的新实例和缓存服务,这基本上不是一个好主意。
import java.util.Collection;
import java.util.Map;
import java.util.Set;
import com.google.appengine.api.memcache.MemcacheService;
import com.google.appengine.api.memcache.MemcacheServiceFactory;
import com.google.appengine.api.memcache.Stats;
public class AppMemCache {
private static MemcacheService c = MemcacheServiceFactory.getMemcacheService();
public static boolean containsKey(Object key){
return c.contains(key);
}
public static Object get(Object key){
return c.get(key);
}
// returns only the cached key/object pairs
public static Map<String, Object> getAll(Collection<String> keys){
return c.getAll(keys);
}
public static void put(Object key, Object value){
c.put(key, value);
}
public static void putAll( Map<String, Object> values){
c.putAll(values);
}
public static boolean remove(Object key){
return c.delete(key);
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public static boolean deleteAll(Collection keys){
Set deletedKeys = c.deleteAll(keys);
if(deletedKeys.size() == keys.size())
return true;
return false;
}
public static Stats getStatistics(){
return c.getStatistics();
}
}