Google AppEngine(Java)Memcache不存储数据

时间:2013-02-17 01:20:37

标签: java google-app-engine memcached jcache

我有这段代码

//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是​​不是很自然地恨我?是否有一些我正在做的(或没有做的)代码导致所有这些?我想知道如何解决这个问题。谢谢!

2 个答案:

答案 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();
}
}