我有一个实体用于非关键日志记录游戏完成率,基本上只是简单的计数器。由于这一事实将每天更新数十万次(并且有望增长),它将(几乎)永久地存在于memcache中。
为了避免为数十万次非关键数据写入付费,我很高兴冒险只需每15分钟左右用磁盘写入对象保存在memcache中。
我无法看到任何明显的方法,但我想知道是否有类似ofy().save().entity()
的内容可用于写入缓存而不是磁盘?如果没有,是否还有其他简单的方法可以将实体写入memcache?
如果我需要自己处理,有没有办法可以使用Objectify用来读取objectify存储的对象的memcache键,或者我最好只处理所有的缓存?
答案 0 :(得分:4)
单独使用Objectify无法做到这一点。但是,你可以非常有效地伪造它。
Objectify缓存命名空间ObjectifyFactory.MEMCACHE_NAMESPACE
中的实体。所有缓存键都是字符串化的Key对象(Key<?>.toWebSafeString()
)。所有缓存值都是低级别的api Entity
对象。
您可以使用ofy().load().fromEntity(entity)
和ofy().save().toEntity(pojo)
在实体和POJO之间来回手动转换。
这可能足以实现你想要的。请注意,Objectify的内置缓存行为是清除写入(保存/删除)条目,仅填充get上的缓存。另请注意,有一个特殊的标记值NEGATIVE
(文字字符串),表示实体不存在的缓存事实。