12

私は今学期にデータベースの授業を受けており、RDBMS と memcached などのキャッシュ サーバーとの間でキャッシュの一貫性を維持する方法について勉強しています。競合状態が発生すると、一貫性の問題が発生します。例えば:

  1. キャッシュからを実行しget(key)、キャッシュ ミスが発生したとします。キャッシュ ミスが発生したため、データベースからデータを取得put(key,value)し、キャッシュに対して a を実行します。
  2. しかし、競合状態が発生する可能性があり、データベースから取得したデータを他のユーザーが削除する可能性があります。putこの削除は、キャッシュを行う前に発生する可能性があります。

したがって、理想的にはput、データがデータベースに長く存在するため、キャッシュへの挿入は発生しないはずです。

キャッシュ エントリに TTL がある場合、キャッシュ内のエントリの有効期限が切れる可能性があります。それでも、キャッシュ内のデータがデータベースと一致しないウィンドウがあります。

この種の問題について語っている記事/研究論文を探しています。しかし、有用なリソースは見つかりませんでした。

4

4 に答える 4

0

memcache の変数 save をロック信号として使用するのはどうですか?

すべての memcache コマンドはアトミックです

データベースからデータを取得した後、ロックをオンに切り替えます

データをmemcacheに入れたら、ロックをオフに切り替えます

データベースから削除する前に、ロック状態を確認してください

于 2013-03-27T02:10:27.070 に答える
-1

読み取ると、次のことが起こります。

if(Key is not in cache){
  fetch data from db
  put(key,value);
}else{
  return get(key)
}

書くと、次のことが起こります。

1 delete/update data from db
2 clear cache
于 2015-12-29T17:39:10.213 に答える