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