
先週末に、Apache2+mod_perlな環境で新しいサイト作ってたのです。
せっかくだから、今まで触ったことの無いClass::DBI使おうと思って0.96入れたわけですよ。0.96。
そしたらなんかupdateしたレコードの値が変わらないんです。もうお前ら150円やる宇和なにうぃげfせrtfぎゅひじょkpl
今までは独自にO/Rマッピングしてたんだけど、たまには一般的なのでも使ってみようということで使い出したです。
そのサイトは、Webアプリ側はとあるテーブルのカウント数値を元にしてソートをかけてランキング表示をして、バックエンドでカウントの数値を更新しています。
しばらく動かしていたら、ソート結果は意図したとおりだけど、表示されるカウント数値が更新されなくなりました。
なんとなくデータキャッシュされてそうだなぁと思いClass::DBI.pmやらIma::DBI.pmのソースを調べて
Data::Table->search_hoge()->{_data};そしてついさっき
のみまくし日記 - Class-DBI-0.96(1792) - TokuLog!
で、原因は判明。
Class::DBI の Version 0.96 以後では、オブジェクトの生成にキャッシュが効くのが原因でした。
Primary Key が同じオブジェクトは、キャッシュされるのです。
$Class::DBI::Weaken_Is_Available = 0;
しっかし、クエリを投げてデータも取ってきてるのにキャッシュしてるのかな。。。変な実装。。。
apache2+mod_perlな環境だけなのか何なのかも謎
同じプロセス内ではキャッシュが生き続ける感じなのかしら。
てか、一年前からの既出ネタの可能性大なのか。。。ぐぐっても対処法わからんかったorz
MFPM::Class::DBI
こんにちは。
http://www.lost-season.jp/pm/Class/DBI/Plugin/NoCache.html
拙作ですが、同じ解決法($Class::DBI::Weaken_Is_Availableの操作)
によるモジュールです。
clear_object_indexを呼ぶのもアリかもしれませんが面倒かも。
確認してないのですが、Class::DBI::Sweetは
キャッシュ関係の処理がかなり変更されているようなので、試してみるといいかもです。
なるほど、Class::DBI->_initを直接書き換えちゃう形の実装なのですね。
参考にします~