从物化缓存中驱逐对象

时间:2014-07-01 05:14:39

标签: objectify

特别是Objectify团队,

我通过这种代码模式持久保存我的对象

Entity filled = ofy().save().toEntity(myPojo);
filled.setUnindexedProperty( "myStuff", "computedSpecialValue" );
datastore.persist(filled);

回读我的对象,我注意到它们是从缓存中获取的,因为Objectify没有被告知它应该从缓存中驱逐更新的实体。

我喜欢Objectify缓存功能,因为它节省了我从memcache中获取数据并为每次读取重新构建对象的时间,所以我希望我的对象被缓存,但我希望能够驱逐它们。

此讨论称2013年中期没有解决方案,https://groups.google.com/forum/#!msg/objectify-appengine/n3FJjnYVVsk/6Xp99zReOKQJ

如果仍然如此,我希望有一个类似

的API
ofy().save().entity(myPojo).evict();

顺便说一句,我认为如果

,API会更加一致
Entity filled = ofy().save().toEntity(myPojo);

取代
Entity filled = ofy().save().entity(myPojo).toEntity();

当然,这个问题有一个代价高昂的解决方法:

  • 将实体保存两次(一次手动,然后通过客观化)

1 个答案:

答案 0 :(得分:1)

虽然没有用于驱逐缓存条目的正式API,但这并不难:

MemcacheServiceFactory
    .getMemcacheService(ObjectifyFactory.MEMCACHE_NAMESPACE)
    .delete(key.toWebSafeString());