データベースとアプリケーションのシナリオとの関係のRedisの原則

まず、何のRedisのこと?

Redisのタイプ、高性能のキーと値のデータベースをログに記録することができ、メモリの持続性に基づいて、オープンソース使用ANSIC言語、ネットワークのサポート、シングルスレッドプロセスです。

Redisの利点:

  • Redisのは、あなたが再利用できる場合に、メモリ内のデータがディスク、負荷へのリブートに保存することができ、データの永続性をサポートしています。
  • また、ストレージ・リスト、セット、ZSET、ハッシュおよび他のデータ構造を提供しながら、Redisのは、簡単なキーと値のデータ型をサポートしています。
  • Redisのバックアップデータ、すなわち、データバックアップマスタ・スレーブモードをサポートします。

二、Redisのいくつかのモデルがありますか?

3つのタイプがあります:

①シングルノード・モード(Redisの構成)。

(一次twoから構成される)②マスタ・スレーブモード。

センチネルモード③(プライマリ2点から配置された3つの)

注:裁判官プライマリ・インスタンスの統一障害が少なくとも二つのセンチネル・プロセスを必要とし、非遵守の数、できないフェイルオーバー

第三に、プロジェクトに適して使用されているキャッシュ技術、RedisのとMemcachedのおよびその他のNIOの現在の数のため?

  • より多くの主流のキャッシュ技術は、RedisのとMemcachedの、キャッシュは、視点からだけでヒットしている、Memcachedの方が高い、かもしれRedisのとMemcacheのギャップは大きくないですが、Redisのは、より強力な番号を提供し、読み込み、書き込み速度も非常にあります速いです。我々は、データをキャッシュするためのRedisを選んだので。
  • メモリにキー値の形式でデータバッファをRedisの、データストレージタイプ(文字列、ハッシュ、リスト、セット、にSortedSet)を数多く提供して、それ自体の機能は永続的(二種類:RDB、AOF)を提供し、また、あなたは、ダウンタイムRedisの際にデータの損失を防ぐために、ディスク(SAVE Redisのコマンドは、現在のRedisのデータベースのバックアップを作成します)にデータをバックアップすることができます。(定期的にディスクに書き込まれたデータを更新するか、追加のログファイルを書き込む動作を変更するために、そしてこれに基づいてマスタースレーブ(マスタとスレーブ)の同期を実現します)。

四、Redisの理由は、キャッシュを行いますか?どのような実用Redisのプロジェクトの目的を?するときは、使用できますか?

1)Redisのは、キーと値のNoSQLデータベースの形態です。あなたはすぐに探しkey're見つけることができます、との値が取り出されます。Redisの全てのデータがメモリに配置され、アクセス速度が非常に速く、一般にバッファ使用のために使用されます。

2)プロジェクトで使用される一般的にキャッシュとして使用Redisの、キャッシュされたオブジェクトは、データベースアクセスの効率を改善するための圧力を低減することです。

3)インターネットであれば、非常に同時読み取りを投影する関係や、大量のデータの存在がキャッシュRedisのとして使用することができるように。もちろん、Redisのは、キャッシュに加えて、実際のビジネスシナリオに応じて決定的なのRedisすることができ、豊富なデータ型を提供します。例えば、使用してRedisのは、順序番号生成、トラフィックカウンタ、タスクキュー、リーダーボード、ユーザーのショッピングカートの情報を保存するというように。

  • 1. 2.文字列のハッシュリスト3. 4. 5.順序付きコレクションセット:サポートにデータストレージの5種類のRedis

ハッシュことを特徴としている何[1]?文字列の利益率がありますか?

タイプハッシュより州文字列のハッシュ・メモリは、オブジェクトを記憶するより少ないメモリを消費し、オブジェクト全体へより簡単にアクセスすることができます。あなたがのハッシュを格納するオブジェクトを作成するとzipmapで始まる(も小さなハッシュとして知られています)。そのメモリが継続され、各欠失がメモリを再割り当てし、メモリの断片化の状況が存在しません。

五、Redisのクラスタは、1つのノードがどのように行うためにダウンしましたか?解決策は何ですか?

  • クラスタのRedis:一般的には、プライマリサーバから少なくとも2台のサーバです!
  • クラスタマスターがぶら下がっRedisの場合は、サーバ間の関係(センチネルモードおよびトランキングモード)はありません

六は、データの整合性を確保する方法をRedisの?

サーバがクライアントの要求を処理するシングルスレッドさのRedis、そのクライアントは、サーバの実行の直列化され、その要求のサーバーであり、並行性の問題。しかし、ビジネス面ではなく、Redisのの同時操作とキーの状況があります。だから、作る方法をクライアントがBのクライアントがあることを知っている、それは操作したい操作問題キーを、それが議論することが必要になります。

解決策1:

  • 同時操作の直列化を確実にするために操作されるキーをロックすることにより。

例:

②使用Redisのトランザクション操作に使用MULTI、DISCARD、EXECに、クライアントが連載しました。

セブン、どのようにデータベースのMySQLとRedisのを同期するには?

背景:異常は、データベース、データベースのデータとロールバックが、その後のデータ・キャッシュを発生し、減少インベントリ下Redisの場合、

ソリューション:

  1. キャッシュに有効期限を設定し、データベースを更新するために、キャッシュを更新し、(キャッシュの内容を更新することはお勧めしません、キャッシュ間の設定を有効期限が切れる);リアルタイム同期方式、すなわち、クエリキャッシュはキャッシュにその保存DBから、別のクエリを見つけることができません
  2. 高い同時実行の下では、非同期キューなどの同期は、生産と消費のメッセージを処理カフカメッセージングミドルウェアを採用することができます。
  3. キー:使用アリ同期ツール運河、運河の実装では、監視DB bitlogログキャッシュ更新トリガの更新、同期機構シミュレーションMySQLのスレーブとマスターであります

八、あいまい検索をしてRedisの?

Redisのが許可されている3つのワイルドカードあいまいクエリは、次のとおりですか。*、[]?

どこで:

  • *:文字のワイルドカード任意の数
  • ?:ワイルドつの文字
  • []:括弧内の1つのワイルドカード文字

特に練習のアイデア:

  1.  条件は、キーストレージZSETとして照会されます
  2. StringRedisTemplate.keysを呼び出し、(パターン)を取得する場合

九、Redisの実用的なアプリケーションのシナリオ

[1]は項目の最新のリストを示してい

次のステートメントは、より多くのデータと、クエリは間違いありませんが遅くなり、最新のプロジェクトを表示するために使用されます。

SELECT * FROM foo WHERE ... ORDER BY time DESC LIMIT 10 

各コメントには、データベース内で一意の増分IDフィールドを持っていると仮定。私たちは、Redisの、新しいレビューが公開された各時間のテンプレートを使用したホームページやコメントページを作成するには、タブを使用することができ、我々は、IDのRedisのリストに追加されます:

LPUSH latest.comments <ID>  

唯一、最新の5000のレビューを保存する必要があり、我々が行うためにここにいるRedisのは非常に簡単です。Redisのでは当社の最新の居住者IDに更新されたされたキャッシュを、使用して。私たちは常にRedisのを聞いてきますID機能を得るように、しかし、我々は、5000 ID以上に制限していませんでした。のみを開始/ countパラメータは、この時間の範囲を超えている、唯一のデータベースにアクセスする必要があります。

       私たちのシステムは、「リフレッシュ」キャッシュなどの伝統的な方法のように、Redisのインスタンス情報は常に一貫していません。SQLデータベース(またはハードディスク上のデータベースの他のタイプ)のみのホームページまたは最初のページには、ハードドライブ上のデータベースへのトラブルではないコメントがある一方で、「非常に遠く」のデータを取得するために、ユーザーのニーズにトリガされます。

[2]チャートアプリケーション、動作がTOP Nを取り

最新のNデータ操作時間加重を取り、これは、このような単位のソートトップとして、重みのための条件である、我々は実行するためにソートセットを必要とし、あなたを設定します。この時間は、のソートセットに値をソートしたいですスコアは、特定のデータは、設定値、コマンドZADDを実装する必要がある時間に対応します

//将登录次数和用户统一存储在一个sorted set里

zadd login:login_times 5 1

zadd login:login_times 1 2 zadd login:login_times 2 3//当用户登录时,对该用户的登录次数自增1 ret = r.zincrby("login:login_times", 1, uid)//那么如何获得登录次数最多的用户呢,逆序排列取得排名前N的用户 ret = r.zrevrange("login:login_times", 0, N-1) 

[3]ゲームリーダーボード

たとえば、あなたが通常必要スコアに基づいて、Facebookのゲーム:

- リストの上位100選手が得点

- リスト、ユーザーの現在の世界ランキング

  • Redisのためのこれらの操作は、あなたが毎分が新たなスコアの数百万人があるだろう、何百万ものユーザーを持っている場合でも、ケーキの一部です。モードはつまり、新しいスコアを取得するたびに、私たちはこのコードを使用します。
ZADD leaderboard  <score>  <username>

あなたはそれはあなたが設計方法によって異なり、ユーザ名を置き換えるためにユーザーIDを使用することができます。ユーザーは、トップ100のスコアを取得する非常に簡単です:

ZREVRANGE leaderboard 0 99

類似したユーザー、世界中のランキングのみ:

ZRANK leaderboard <username>

 

おすすめ

転載: www.cnblogs.com/wushaopei/p/11979317.html