2017-05-26 9 views
0

redisをキャッシュとして使用して、アプリケーションの呼び出しプロセスの開始と終了を理解することができません。アプリケーションがSQLなどのDBを持っていて、キャッシュにredisを使用しているとします。そのプロセスのタイミングはどのように動作しますか?私の理解によれば、redisはSQL DBを呼び出してデータとUI呼び出しを呼び出し、そのデータを直接redisから消費し、SQL DBへの呼び出しを制限します。通常、redisはデータを取得するためにDBへの呼び出しを行いますか?それはSQL DBとどのように同期していますか?私はこの高水準を理解しようとしています。ありがとうございました!Redisキャッシュと全体的なプロセス

答えて

0

私はRedisがSQL DBを呼び出すというシナリオに遭遇したことはありません。 Redisは独自のデータをRAMに保存するキーバリューストアなので、通常はアプリでキャッシュするために直接使用されます。これらのケースでは、SQL DBの関与は全くありません。

Redisの最大の強みは、格納される要素の数に関係なく、一定の時間内に多くの操作がデータを返すことです。これは、非常に迅速な応答時間を必要とするキャッシングおよびロック機構のような多くのユースケースでは優れています。

1

Redisは単なるキャッシュであり、高速データストアを提供しますが、データベースはより低速ですが信頼性が高く、より多くの機能を備えています。アプリケーションは、Redisからデータを取得する必要があります。見つからない場合は、適切な有効期限と無効化の仕組みを使用してデータベースから取得し、Redisに追加します。

+0

大規模なアプリケーションを処理するためには、通常、いくつのインスタンスが必要ですか? – CW1

+0

"文字列の長さはどれくらいですか?"私はそれに答えるのに十分な情報がほとんどないので、それは問題ではありません。これは、「大規模な」アプリケーションの意味、実行する内容、Redisインスタンスで使用可能なデータ量、頻度、およびリソースによって異なります。 – Adrian

1

簡単な例を見て行きましょう。 PythonでRedisを使ってユーザオブジェクトをキャッシュする仮説的なアプリケーションを考えてみましょう。ユーザーオブジェクトは、Hashデータ型のキーuser:{id}でRedisにキャッシュされます。ユーザーデータの記録システムは、リレーショナルデータベースに格納されます。 Idは整数で、pkはdbで生成されます。

# r = redis.StrictRedis(hostname) 
def get_user(r, id): 
    key = "user:{}".format(id) 
    user = r.hgetall(key) 
    if user is None: 
     return fetch_user_from_db(id) 
    else: 
     return user 

私たちはのようなコードを実行しますユーザーを書くために:

# r = redis.StrictRedis(hostname) 
def update_user(r, user): 
    key = "user:{}".format(user['id']) 
    r.delete(key) 
    write_user_to_db(user) 

この簡単な例は、詳細の多くを残し、我々はこのようなコードの何かを実行するだろうユーザーをフェッチするために

分散環境でキャッシュとdbの一貫性を維持することですが、単一のノードではこれが基本的なプロセスです。あなたのアプリはキャッシュの詳細を処理し、キャッシュヒットをチェックし、書き込み時に無効にする必要があります。

関連する問題