最近は久々に技術ブログっぽくなってきました。先進かつ有用なネタは全くないのだけど。
(釣り目的でこのサイトに訪れている方には申し訳ないのだが。)
前の記事に書いた通り、そのサイトは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<?>にしちゃいました。


