使用Objectify将实体保存到memcache但不保存到磁盘

时间:2015-08-20 05:27:12

标签: google-app-engine memcached objectify

我有一个实体用于非关键日志记录游戏完成率,基本上只是简单的计数器。由于这一事实将每天更新数十万次(并且有望增长),它将(几乎)永久地存在于memcache中。

为了避免为数十万次非关键数据写入付费,我很高兴冒险只需每15分钟左右用磁盘写入对象保存在memcache中。

我无法看到任何明显的方法,但我想知道是否有类似ofy().save().entity()的内容可用于写入缓存而不是磁盘?如果没有,是否还有其他简单的方法可以将实体写入memcache?

如果我需要自己处理,有没有办法可以使用Objectify用来读取objectify存储的对象的memcache键,或者我最好只处理所有的缓存?

1 个答案:

答案 0 :(得分:4)

单独使用Objectify无法做到这一点。但是,你可以非常有效地伪造它。

Objectify缓存命名空间ObjectifyFactory.MEMCACHE_NAMESPACE中的实体。所有缓存键都是字符串化的Key对象(Key<?>.toWebSafeString())。所有缓存值都是低级别的api Entity对象。

您可以使用ofy().load().fromEntity(entity)ofy().save().toEntity(pojo)在实体和POJO之间来回手动转换。

这可能足以实现你想要的。请注意,Objectify的内置缓存行为是清除写入(保存/删除)条目,仅填充get上的缓存。另请注意,有一个特殊的标记值NEGATIVE(文字字符串),表示实体不存在的缓存事实。