3

有人可以用示例解释一下 java 中 play framework 2 中的缓存注释是如何工作的吗?我想用他的参数缓存方法的结果;像这样的东西:

@Cache(userId, otherParam)
public static  User getUser(int userId, String otherParam){
return a User from dataBase if it isn't in cache.
}

也许有教程可用?

谢谢你的帮助。

4

1 回答 1

2

@Cached注解不适用于每个方法调用。它仅适用于 Actions,而且,您不能将参数用作缓存键(它只是一个 static String)。如果您想知道它是如何工作的,请查看play.cache.CachedAction源代码。

相反,您将不得不使用Cache.get(), 检查结果是否为空,然后Cache.set()使用Cache.getOrElse()aCallable和如下代码:

public static User getUser(int userId, String otherParam){
    return Cache.getOrElse("user-" + userId + "-" + otherParam, new Callable<User>() {
        @Override
        public User call() throws Exception {
            return getUserFromDatabase(userId, otherParam);
        }
    }, DURATION);
}

构造缓存键时要小心,以避免命名冲突,因为它们在整个应用程序中共享。

于 2013-06-06T19:06:53.250 回答