redisキャッシュ・ノット

4324 ワード

redisはNoSQLデータベースであり、現在のインターネット会社では従来のデータベースと相補的な役割を果たしています.今日はまとめてみましょう.この小結を書いた時、私はもう2年間働いていました.つまり、2年間redisを使っていました(社内では運維さんのr 2 mクラスタを使っていますが、京東の学生は知っているはずです.その底がredisです).だからここではダウンロードのインストール方法は言わないで、redisの5種類のデータ型を紹介しました.これはネットで大きく調べてみると、string list set zset hashが最も基礎的に使われています.一般的なデータ操作コマンドよりも,ここでは主にredisのトランザクション操作,redisのパブリケーションサブスクリプション(プロジェクトでずっと使用されているので,メッセージミドルウェアと比較して学習できる),redisの分散ロックの使用,最後にpiplineの使用について述べる.どんな技術を勉強しても、まず公式文書をすり抜けます.Programming with Redis The full list of commands implemented by Redis, along with thorough documentation for each of them. Pipelining: Learn how to send multiple commands at once, saving on round trip time. Redis Pub/Sub: Redis is a fast and stable Publish/Subscribe messaging system! Check it out. Redis Lua scripting: Redis Lua scripting feature documentation. Debugging Lua scripts: Redis 3.2 introduces a native Lua debugger for Redis scripts. Memory optimization: Understand how Redis uses RAM and learn some tricks to use less of it. Expires: Redis allows to set a time to live different for every key so that the key will be automatically removed from the server when it expires. Redis as an LRU cache: How to configure and use Redis as a cache with a fixed amount of memory and auto eviction of keys. Redis transactions: It is possible to group commands together so that they are executed as a single transaction. Mass insertion of data: How to add a big amount of pre existing or generated data to a Redis instance in a short time. Partitioning: How to distribute your data among multiple Redis instances. Distributed locks: Implementing a distributed lock manager with Redis. Redis keyspace notifications: Get notifications of keyspace events via Pub/Sub (Redis 2.8 or greater). Creating secondary indexes with Redis: Use Redis data structures to create secondary indexes, composed indexes and traverse graphs. 上記の内容はredisの公式ドキュメントから:1.redisは、すべてのインプリメンテーションのコマンドリストです.2.redisのpipline 3.redisのpub/subコマンド4.redisのluaスクリプト5.redis debug 6.redisメモリ最適化7.redisの期限切れ8.redisのlurkey淘汰アルゴリズム9.redisのトランザクション10.redisの大数書き込み11.redisのデータのクラスタ上のスライス13.redis分散ロック...
pipline
using piplining to speedup redis queryies公式の最初の文は、piplineを使用する目的はクエリーを高速化することです.redisの本質はtpcのclient/serverモデルであり、すなわち、クエリー要求がサービス側に到着し、サービス側が処理するのを待ってから、クライアントにデータを返すことである.リクエストが送信されてからサービス側から返されるメッセージが受信されるまでの時間が往復遅延である.piplineは、リクエスト-待機-応答をスキップするモードであり、1つのリクエストが処理されていなくてもリクエストを送信し続けることができ、クライアントが応答を待たずにサービス側にリクエストを送信し続けることができます.最終的に今回のリクエストの結果を返します.Client:INCR X Client:INCR X Client:INCR X Client:INCR X Server:1 Server:2 Server:3 Server:4この場合、リクエストごとに待つ必要がなくなり、往復遅延が短縮されます.piplineは往復遅延を改善するだけでなく、サーバの観点からcpuの使用率を大幅に低減することができます.例えば、1000個のリクエストがあり、1000回必要でしたが、今は1回しか必要ありません.
      try {
            jedis = new Jedis("10.10.224.44", 6379);
            Pipeline pipline = jedis .pipelined();
            for(int i =0; i<1000; i++){
                 pipline .incr("hello");
            }
            pl.sync();
        } catch (Exception e) {
            ...
        }

pub/sub
redisのpub/subは、メッセージのパブリケーションと傍受の方法であり、メッセージのパブリケーションと受信者をデカップリングする.実際の使用例:luceneで検索する場合、生産インデックスは1台で生産されるだけなので、生産されたこの機械からインスタンスごとの機械にインデックスを置く必要があります.では、問題が来たら、どのようにそれらの機械に生産したことを教えてあげましょうか.ここでこのコマンドを使用できます.
  if(       )
    then pub(             )

     jedis subscribe
  if(    )
    then            

現在、メッセージ・ミドルウェアが流行している環境では、このような方法で注意深く通信することは推奨されていません.メッセージは、パブリケーションにとってパブリケーションが消失し、サブスクライバはメッセージのパブリケーションを監視するためにスレッドを必要とします.この方法の代わりにmqメッセージを使用し、
redisトランザクション
1つのキューでは、一度に、順番に、一連のコマンドを実行します.DISCARD EXEC MULTI UNWATCH WATCH discardは、今回のトランザクションmultiオープントランザクションを放棄し、通常はOK(open session)オープントランザクションを返した後、操作のたびにエンキューされ、execを知っていれば、すべてのキューのコマンドがコミットされます.exec実行トランザクション(commit)watch 1つ以上のkey unwatchを監視すべてのkeyに対するwatchの監視をキャンセルmulti-->set a 1 set b 2 set c 3--->exec watchの特別な説明.例えば私がwatchをしているとき、ユーザーの口座残高は100元で、あなたが自分で一連を処理した後、まだ100元で、提出するときは大丈夫です.このwatchの間に他の人に修正されたら、watchの提出で失敗したことを教えてくれます.redisのトランザクションに対するサポートは部分的にサポートされています.すべてのコマンドが実行キューに置かれているため、実行時にのみ実行可能かどうかがわかります.multi-->set a aa incr a set b 1--execというコマンドの実行が完了すると、b=1だけが成功します.aのvalue stringタイプでは加算操作はできませんが、redisは実行していないときは分かりません.だから、実行してこそ、負けていることがわかります.したがって、第1のコマンドは失敗したが、第2のset b 1は合法的であり、実行に成功した.したがって、redisのトランザクションのサポートは一部のサポートです.