0

私はしばらくの間、Google App Engine (Python) で Memcache を使用してきましたが、通常は非常にうまく機能します。ここ数日で、以下の例のようなコードで、データベース エントリを更新した直後に更新すると、間に合わないことに気付きました。これは、エントリをデータベースに保存するのに時間がかかるためですか? 解決策はありますか?

# I store the comment here 
c = Comment(content = content, submitter = submitter, group_id=int(group_id), user_id = user_id)
c.put()
# Right after I store the comment I refresh the cache
comment_cache(int(group_id), True)

多くの場合、最新のコメントはキャッシュにありません。

4

2 に答える 2

2

結果整合性のためcomment_cache()、クエリを実行する (つまり、キーでフェッチしない) 場合、記述した内容が期待されます。

いくつかの解決策:

  1. パラメータとして取得するように変更comment_cache()してc、それについて明示的に認識できるようにします: comment_cache(int(group_id), True, c).
  2. comment_cache()タスク キューで実行します。新しいコメントを取得するという保証はまだありませんが、しばらくしてから実行されるため、可能性があります。
于 2012-11-06T06:09:18.797 に答える
1

私はあなたと同じ問題を抱えていました。

データベースに値を追加したときにキャッシュを更新しましたが、クエリの実行に時間がかかったため、最後に挿入した値がキャッシュに挿入されませんでした。

私の解決策:キャッシュを更新する関数がありましたが、データベースに入れたい値をそのようなパラメーターとして追加しました:

def get_values_from_cache_or_database(particular_value = None, update = True):
  key = 'my_key'

  values = memcache.get(key)
    if values is None or update:
      values = db.GqlQuery("SELECT * FROM Table")
      values = list(values)
      if update:
        if particular_value not in values:
          # if we are here, particular_value isn't in your data base (because time 
          # request is  long) but we want the particular_value in the cache so we add 
          # it manually  
          values.append(particular_value)
  memcache.set(key, values)
  return values

したがって、たとえば、値「value1」を次のように入力し ます。value1.put() この関数を呼び出して、「value1」をパラメータとしてキャッシュを更新します。 get_values_from_cache_or_database(value1, True) 次に、最新の値が追加されたキャッシュを取得します。

于 2013-05-06T05:29:02.893 に答える