2016-11-21 12 views
0

flush_all()が統計情報を更新していないように見える理由を誰かに教えてもらえますか?クライアントを作成して1つのキーを追加して取得した場合は、flush_all()get_stats()はの場合は0を返すと予想されますが、そうではありません。 flush_all()の後にget()のキーが実行されてからcurr_itemsになるまでは、0に戻されません。Python memcache flush_allの動作

は、ここで私が目撃してるものの例です:

import memcache 

# Create a client 
mc = memcache.Client(['127.0.0.1:11211'], debug=0) 

# Add a key 
mc.add('foo', 'bar') 
print mc.get('foo') 

# Get stats 
stats = mc.get_stats() 

# There will be 1 current item 
print "Initial get_stat(): {}".format(stats[0][1]['curr_items']) 

# Flush all 
mc.flush_all() 

# Get stats again 
stats2 = mc.get_stats() 

# There shouldn't be any items, but there is 1 
print "Second get_stat(): {}".format(stats2[0][1]['curr_items']) 

# Get the one key we added before 
mc.get('foo') 

# Get stats a third time 
stats3 = mc.get_stats() 

# There shouldn't be any items and now there aren't 
print "Third get_stat(): {}".format(stats3[0][1]['curr_items']) 

実行結果:期限切れとして

bar 
Initial get_stat(): 1 
Second get_stat(): 1 
Third get_stat(): 0 

答えて

1

flush操作が実際にメモリから何かを削除しません、それだけですべてをマークします。期限切れのアイテムは、アクセスしようとするまで実際には削除されません。

+0

ありがとう、@barmar。強制的に削除する方法はありますか?いずれにしても、私の最初の質問にお返事いただきありがとうございます。とても有難い。 –

+0

私はそうは思わない。どのような問題を解決しようとしていますか? – Barmar

+0

私は、すべてのアイテムを洗い流すのに長い時間がかかっていたことに気づいていると思っていました。だから、私はflush_all()を実行し、待って、統計を取得し、curr_itemsをチェックし、curr_items> 0なら繰り返すルーチンを書いた。とにかく、私は遅れについて間違っていたことが判明しました。 GUIを使ってキーを表示していたので、赤いスリングが投げられました。私がflush_all()を実行した後、私はkesをリフレッシュし、それらが1で消えるのを見ます。もう一度あなたの助けをありがとう。 flush_all()を実行し、キーが取得できないことを知ることは、私のユースケースのために働いています。 –

関連する問題