最近は久々に技術ブログっぽくなってきました。先進かつ有用なネタは全くないのだけど。
(釣り目的でこのサイトに訪れている方には申し訳ないのだが。)
前の記事に書いた通り、そのサイトはGoogle App Engineで動かしているので、処理には少し気を使います。
とはいえ、弱小サイトなので無料運用は余裕ですが...。
ただ、本人的にはもう少し利用者を増やすぞという気持ちもあるので、利用者が増えても大丈夫にしたいと思っています。
Google App EngineではDatastoreへのアクセス回数を減らしてMemcacheにデータを乗せるというのがセオリーです。
Datastoreへのアクセス回数は可能な限り少なくできれば、無料運用しやすいので。
Slim3 ModelのModelRefでレイジーロードするときにDatastoreにアクセスするので、そこを改造していました。
ModelRefを継承したCachedModelRefを作成し、refreshメソッドの処理を書き換えて...と。
作成したクラスは以下みたいな感じで書きましたが、呼び出し元での書き方がわからず...。
結局、コンストラクタのClass<CachedDaoBase<M>>をClass<?>にしちゃいました。
(釣り目的でこのサイトに訪れている方には申し訳ないのだが。)
前の記事に書いた通り、そのサイトはGoogle App Engineで動かしているので、処理には少し気を使います。
とはいえ、弱小サイトなので無料運用は余裕ですが...。
ただ、本人的にはもう少し利用者を増やすぞという気持ちもあるので、利用者が増えても大丈夫にしたいと思っています。
Google App EngineではDatastoreへのアクセス回数を減らしてMemcacheにデータを乗せるというのがセオリーです。
Datastoreへのアクセス回数は可能な限り少なくできれば、無料運用しやすいので。
Slim3 ModelのModelRefでレイジーロードするときにDatastoreにアクセスするので、そこを改造していました。
ModelRefを継承したCachedModelRefを作成し、refreshメソッドの処理を書き換えて...と。
作成したクラスは以下みたいな感じで書きましたが、呼び出し元での書き方がわからず...。
package xxx.base.datastore; import org.slim3.datastore.ModelRef; /** * CachedModelRef */ public class CachedModelRef<M> extends ModelRef<M> { private Class<CachedDaoBase<M>> daoClass; @Override public M refresh() { try { return daoClass.newInstance().get(key); } catch (InstantiationException | IllegalAccessException e) { throw new RuntimeException(e); } } public CachedModelRef(Class<M> modelClass, Class<CachedDaoBase<M>> daoClass) throws NullPointerException { super(modelClass); this.daoClass = daoClass; } }
結局、コンストラクタのClass<CachedDaoBase<M>>をClass<?>にしちゃいました。