2012-02-22 3 views
3

私は非常に重いクラス定義を持っています。これはMySQLに依存します(時には遅くなることもあります)。OOP付きPHPでMemcacheを使用する

PHPでMemcacheライブラリをインストールして使い始めました。これにより、オブジェクトを再クエリすることなくオブジェクト全体を保存することができます。

しかし、変更をデータベースに自動的に反映するようにクラスを拡張しました。私は、変更を追跡して、私はMemcacheのオブジェクトを削除するとき__destructかと呼ばれているテストする方法を見つけ出すことはできませんどのような__destruct

に更新する__get__setを使用しています。

実際に知っている人はいますか?それをテストする方法についてのアドバイスはありますか?

+1

キャッシュされたデータを捨てるときにMemcachedが何かを実行するのではないかと思います。 MemcachedはPHP固有のものではなく、* data *のみを格納します。 – deceze

+1

Memcacheがオブジェクトを削除するとき、オブジェクトのデストラクタが全く呼び出されていないと思います。Memcacheによって削除され、PHPでは削除されないためです。 –

+1

Memcacheはデストラクタメソッドとは関係ありません。 –

答えて

3

いいえ、memcacheはオブジェクトを破棄しません。オブジェクトは常に__sleep()__wakeup()です。しかし、PHPはオブジェクトを破壊または失うものではないので、デストラクタは決して呼び出されません。オブジェクトが破棄されてオブジェクトが破棄された後に、キャッシュライブラリがオブジェクトをmemcacheから削除する可能性があります。したがって、__destruct()が呼び出されますが、これは実装に依存します。

+0

Memcacheはシリアル化を呼び出しますか? – Mikhail

+1

@Mikhailほとんどのキャッシュエンジンはkey => valueストアです。それはオブジェクトを格納することはできません.. intや文字列のような単純なデータ型。したがって、あなたのオブジェクトは 'serialize()'と 'unserialize()'によって文字列に変換されます。これが起こると、PHPはこれらの操作を実行する際に特別なことが発生する必要がある場合に備えて、魔法のメソッド '__sleep()'と '__wakeup()'を呼び出します。 memcacheのステータスページを見て、現在メモリにあるものを表示すると、オブジェクトの文字列表現が表示されます。 –

+0

ああ私はそれが実際のメモリチャンクを保存していると思った。私は__wakeup()で時間を節約できますが、おそらく__sleep – Mikhail

関連する問題