2016-05-26 5 views
0

memcachedは、データベース参照を減らすキャッシュ固定データに使用でき、通常はmemcached.get(id)memcached.set(id)です。memcachedをロックに使用できますか?

しかし、これをロック機構に使用するとよいですか? memcache.setmemcached.getは、データが存在する場合は常にデータを返しますか、要求に時間がかかりすぎる場合はNoneを返しますか?

は私がidで識別される特定のリソースへの同時アクセスを回避したいと私はこのロジックを使用:memcache.get(id) = usernameが値を返す場合、我々は他のアクセスを拒否する任意のユーザーがそのリソースにアクセスしようとすると

def access(id): 
    if memcache.get(id): 
     return access 
    else: 
     memcache.set(id) 
     return true 

を、 memcache.set(id) = usernameを実行して後続のアクセスを停止し、現在のユーザーにアクセスを許可します。

memcachedをこのように使用しても問題ありませんか? setgetは、実際にデータを入手できるかどうかにかかわらず、時間がかかっていないか、見つかったものから可能な限り最善の結果を得ています(たとえば、Guaranteed memcached lock)。これまでのカテゴリのものです。それは時間の99%を動作するかもしれないと思ったロックのための仕事。

誰かが明確にすることができますか、代替のロック機構があるかどうか?

答えて

1

私はこれにintersted誰でも、私はWill memcached work reliably for implementing a locking mechanism?でMemcache Githubのスレッドを作成しました。 getsetを使用して一般的な警告のいくつかを説明し、それを避ける方法をaddと説明します。あなたの好きな検索エンジンでmemcacheを使用してdistributed lockingを検索できる場合は、この問題についてのブログもあります。

memcacheの競合状態をより明確にするのに役立つ関連のある質問Memcached, Locking and Race Conditionsもあります。

ここ

がMemcacheのフォーラムで、これに関する詳細な議論です:

Thread 1Thread 2

関連する問題