Redis入門編(2)-奇淫テクニック


スロークエリ


多くのストレージ・システムでは、遅いクエリーの構成が提供されており、オンライン上でどのコマンドが実行されるかを開発および運用するのに時間がかかりすぎて、システムの応答が遅くなります.同じRedisも遜色なく、遅いクエリ命令のような構成も提供されています.Redisは主に2つの構成属性slowlog-log-slower-thanとslowlog-max-lenを提供し、遅いクエリー命令の記録規則を構成する.
  • slowlog-log-slower-than

  • 指令実行時間のバルブ値を設定し、それを超えると記録されます.単位はマイクロ秒(1秒=1000ミリ秒=1000000マイクロ秒)のデフォルト値:10000マイクロ秒で、10ミリ秒にすることを推奨します.
  • slowlog-max-len

  • 最も多くの遅いクエリ命令の数を記録します.実際には、Redisはスロークエリ命令に対してファイルに記録されるのではなく、リストタイプのフォーマットでRedisメモリに格納されます.スロークエリの命令数が設定値を超えると、命令は先に削除されます.コマンドslowlog get[n]で、前のn個の遅いクエリーコマンドを取得できます.
  • スロークエリ関連命令
  • // 1.    n      
    slowlog get [n]
    // 2.               
    slowlog len
    // 3.          
    slowlog reset
    

    使用方法


    スロークエリの構成には2つの方法があります
  • redisのプロファイルを変更する
  • コマンドラインにより、以下のように変更されます.
  • > config set slowlog-log-slower-than
    > config set slowlog-max-len
    

    この方法は一時的にのみ有効です.サービスを再起動しても有効にするにはconfig rewriteを実行して構成をローカルファイルに永続化する必要があります.

    LuaによるRedisのトランザクション処理の解決


    RedisのPipleLineは、複数のコマンドをカプセル化してサービス側に一度に送信して実行することができるが、このような一括操作は原子的な操作ではない.原生の一括操作は原子的操作であるが,機能のサポートは限られている.Redisはmulti、exec、watchの3つの命令を組み合わせて簡単なトランザクションを実現することができ、命令構文上のエラーに対してデータロールバックを効果的に実現することができるが、実行時に発生したエラー(例えば、ある集合に元々格納されていたデータ型が数値型であり、追加時に文字列タイプを追加するとエラーを報告する)に直面して、データをロールバックできない.トランザクションのシーンを満たすために、RedisはLuaスクリプトとの結合によって強力なトランザクションサポートを提供します.(Luaスクリプトの文法についてはネットで自分で調べて、本編では説明しません)

    使用方法


    LuaスクリプトとRedisを組み合わせて使用するには3つの方法があります
  • evalスクリプト内容key個数keyリストパラメータリスト
  • > eval 'return "hello" .. KEY[1] .. ARGV[1]' 1 redis world
    
  • redis-cli--evalスクリプトファイルkey個数keyリストパラメータリスト
  • $ redis-cli --eval /home/zmj/test.lua
    
  • evalsha SHA値key個数keyリストパラメータリスト
  • > evalsha dsfdsjl343j42lj34l23j4l3 1 redis world
    

    このコマンドは、LuaスクリプトをredisメモリにロードするとSHA 1の値が得られ、SHA 1で実行されます.この方法では、スクリプトを効率的に多重化し、実行効率を向上させることができます.luaスクリプトの管理に関するコマンドは次のとおりです.
    //      redis   
    $ redis-cli script load "$(cat /home/zmj/batch_incr.lua)"
    //      SHA1   
    > script exists 4ff9d1c915292602c
    //   redis      Lua  
    > script flush
    

    ケース


    需要:上位3ユーザーのレベルを1つ上げる
  • Luaスクリプト(batch_incr.lua)
  • -- 1.  3   (  Redis   API)
    local userList = redis.call("SMEMBERS",KEYS[1]);
    local count = 0 ;
    -- 2.    3   
    for index,key in ipairs(userList)
    do
    -- 3.       
    	redis.call("incr",key);
    	count=count+1;
    end
    return count;
    
  • 実行スクリプト
  • $ redis-cli --eval /home/zmj/batch_incr.lua
    

    書く技術の文章は1つの順序を追って漸進的な過程で、だから私はすべての文、すべての行のコードがすべて正しいことを保証することができなくて、しかし少なくとも複製しないことを保証することができて、貼らないことができて、すべての文章はすべて自分の技術に対する認識で、細心の吟味は総括しました。ジョブズ氏は、「私たちはこの星にいる時間が短く、本当に偉大なことをする機会が少ない。同時によくしなければならない。私はまだ若いうちにこれらのことを完成しなければならない」と話した。実は私が言いたいのは、私はプログラマーで、私は限られた時間の中でできるだけ私の一生の中で沈殿することができるものを沈殿させたいだけです。

    清山の緑の水は塵から始まり、博学多識は勤勉より高い。


    私はお酒を持っています。あなたは物語を持っていますか。


    微信公衆番号:「Java錦嚢」。


    一緒に話をしたり、Javaの話をしたりしてください。