2014-12-24 55 views
0

在Objectify中,我可以用@Cache註釋一個實體,將它寫入memcache。如果我想忽略寫入數據存儲的某些屬性,我可以用@Ignore對它們進行註釋。將屬性寫入memcache,但不寫入Objectify中的數據存儲區?

  • 我在尋找的是一種將屬性存儲在memcache中,但不存儲在數據存儲中的方法。
  • 我想將它與.save(onlyCache)結合使用。 {僞代碼}

換句話說,我希望能夠擁有屬性,它只保留到memcache,但不保存到數據存儲。如果實體是從memcache中檢索的,那麼我會填充這些屬性,否則它們是空的。

與此同時,我希望能夠將實體僅保存到memcache,但不保存到數據存儲。

爲什麼這有意義?有時我擁有屬性,我只在用戶在線時需要它們,而且這些屬性無關緊要,如果這些屬性丟失了。例如,假設我有一個用戶實體不經常寫入,但經常閱讀(例如社交網絡中的朋友的狀態),並且我想跟蹤每個用戶的狀態,每當用戶導航時狀態值都會更改在我的應用程序。能夠將用戶存儲到memcache並將其當前狀態指示器已經連接起來是非常好的,因此當它被檢索到時,客戶端會使用持久化值以及任何可用的緩存信息來接收該實體。如果我可以控制.save(onlyCache)來告訴Objectify,如果我想將實體保存到memcache或者直到數據存儲區,我可以調整我想看到什麼以及不想看到什麼。

在Objectify中是否存在這樣的事情和/或是否可行?這種方法有什麼缺點嗎?

回答

2

未持久保存到數據庫的屬性應該可能不屬於該實體。像您提到的運行時屬性可以分別使用MemcacheService(https://cloud.google.com/appengine/docs/java/javadoc/com/google/appengine/api/memcache/MemcacheService)保存到memcache。這不會混亂你的代碼(有太多的註釋,@Ingore,@CacheOnly等等),並保持模式清潔。

+3

這是正確的答案。 Objectify是一個持久性API。如果你想在緩存周圍使用古怪的商業邏輯,你應該將它放在Objectify之上,而不是在它之下。 – stickfigure

+0

我同意你的觀點,但是由於該實體隨後用於一側的持久性和另一側的REST傳輸,因此當將Objectify與雲端點結合使用時,無論如何都會導致圖層不乾淨。所以我們已經在代碼中對兩個不同的東西進行了註釋,並且在此時將更多的緩存添加到同一個實體也許是有意義的。但我同意這樣嚴重註釋的代碼很難閱讀。 –

相關問題