Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Cache Stampede をセマフォで対策する

najeira
September 27, 2016

Cache Stampede をセマフォで対策する

najeira

September 27, 2016
Tweet

More Decks by najeira

Other Decks in Programming

Transcript

  1. 典型的な使い方 # キャッシュからデータを取得する data = get_cache(key) if not data: #

    キャッシュがなければデータベースから取得する data = get_data_from_database(...) # 新しいデータをキャッシュに保存する set_cache(key, data, ttl=60) # ユーザーにレスポンスを返す send_response(data)
  2. コードで見ると data = memcache.get(key_for_data) if not data: memcache.add(key_for_semaphore, 1, ttl=60)

    data = get_data_from_database(...) #データベースから取得 memcache.set(key_for_data, data, ttl=120) # キャッシュを保存 else: #セマフォの獲得を試みる ret = memcache.add(key_for_semaphore, 1, ttl=60) if ret: # セマフォを獲得した場合は新しいキャッシュを作る data = get_data_from_database(...) memcache.set(key_for_data, data, ttl=120) return data