11

5秒の値を設定する簡単な例があります。問題は、5秒後です。'false'を期待したときに、まだ値が返されます。

$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("Could not connect");


$memcache->set('foo', 'bar', 0, 5); // 5 seconds expiry
var_dump($memcache->get('foo')); // bar
sleep(10);
var_dump($memcache->get('foo')); // still shows bar

これがmemcacheサーバーのバージョンです

サーバーのバージョン:1.4.13

4

3 に答える 3

5

ゲームに遅れていますが、コードでは、有効期限に「5」ではなく「0」を渡しているように見えます。これは「期限切れにならない」に変換されます具体的には:

 $memcache->set('foo', 'bar', 0, 5); // 5 seconds expiry

次のようにする必要があります。

 $memcache->set('foo', 'bar', 5); // 5 seconds expiry

ここにある PHP ドキュメントを誤解していない限り、set コマンドが 3 つのパラメーターを取ることが示されています。

 public bool Memcached::set ( string $key , mixed $value [, int $expiration ] )

編集: おっと、 4 つのパラメーターを持つMemcached ではなく、Memcache 拡張機能を使用しているようです。おそらく、0 の代わりに MEMCACHE_COMPRESSED 定数を使用して、動作するかどうかを確認してください。

 $memcache->set('foo', 'bar', MEMCACHE_COMPRESSED, 5); // 5 seconds expiry
于 2012-12-24T07:54:04.777 に答える
2

バージョン 1.4.13 から少なくとも 1.4.14 までの memcached サーバーにはバグがあり、memcached サーバーがしばらく実行されると、値を適切に期限切れにできないモードになることがありました。

サービスを再起動すると修正されました。新しいバージョンでより永続的に修正されることを願っています.

于 2015-10-24T04:52:51.233 に答える
1

コードが問題ないように見えるので、次のチェーンは、memcache PHP 拡張機能のバージョンが機能していないか、memcached サーバー自体を調べることです。

これは、しかしトリッキーです。最も簡単なのは、最初に memcached サーバーを除外することです。(インストールできる php インターフェースがありますが、それはちょっとした作業には役立ちません。)

ターミナル (または Windows のコマンド ウィンドウ) で次のように入力します。

 telnet localhost 11211

(注 - デフォルトでは、telnet クライアントは Windows にインストールされていません。[コントロール パネル]、[Windows の機能の有効化または無効化] に移動し、そこから追加してください。)

これにより、memcached にアクセスできるようになります。

次に、入力します

stats items

memcached のメモリ項目をリストします。

うまくいけば、スラブは 1 つしかないので、その数と種類に注意してください。

stats cachedump [Number] 0

これにより、キャッシュに記録されているものが一覧表示されます。

それでも「バー」が表示される場合 (エンコードされた形式)、memcached サーバーが動作していないため、新しいバージョンにアップグレードしてください。

これに「バー」が表示されない場合 (または、アイテムが存在しないことが望ましい - 代わりに ERROR が表示される場合)、動作していないのは PHP の memcache 拡張機能です。もう一度、そのバージョンを確認してください。

完了したら、入力します

quit

別の方法としては、"memcached" (php 拡張機能) を調べて、これらのクラスを使用して PHP コードを書き直すこともできます。それは新しいです。それでも失敗する場合は、間違いなく memcached サーバーです。それが機能する場合、それは php memcache 拡張機能でした。

于 2012-05-04T04:04:55.717 に答える