21.9-21.12 Redis紹介、インストール、持続化紹介


21.09 Redis紹介
  • RedisはMemcachedと同様であり、k-vデータストア
  • にも属する.
  • Redis官网redis.io,現在の最新安定版4.0.1
  • は、stringに加えてhash、lists(チェーンテーブル)、sets(セット)、sorted sets(秩序セット)
  • をサポートするvalueタイプをより多くサポートします.
  • redisでは、フルデータ(RDB)とインクリメンタルリクエスト(aof)の2つのファイルフォーマットが使用されています.
  • フルデータフォーマットは、メモリ内のデータをディスクに書き込むことで、次回のファイル読み込みに便利です.
  • インクリメンタルリクエストファイルは、メモリ内のデータを操作リクエストにシーケンス化し、mysql binlogに類似したファイルを読み取りreplayしてデータを得るために使用される.
  • redisのストレージは、メモリストレージ、ディスクストレージ、logファイルの3つの部分
  • に分けられる.
    21.10 Redisインストール
    cd /usr/local/src/
    wget http://download.redis.io/releases/redis-4.0.1.tar.gz
    tar zxvf redis-4.0.1.tar.gz
    cd redis-4.0.1
    make && make install
    cp redis.conf /etc/redis.conf
    vim /etc/redis.conf #      

    #把
    daemonize no

    #変更
    daemonize yes

    #noフロント起動、yesバックグラウンド起動
    logfile "/var/log/redis.log"     #      
    dir /data/redis/             #redis      
    appendonly yes                   #  aof,aof  :apendonly.aof
    mkdir /data/redis

    2つのカーネルパラメータは、変更する必要がない場合にデフォルトを維持します.
    rc.localこの2つのパラメータを追加し、オンにすると起動できます.
    sysctl vm.overcommit_memory=1
    echo never > /sys/kernel/mm/transparent_hugepage/enabled

    Redisサービスの開始
    redis-server /etc/redis.conf

    プロセスの確認
    ps uax |grep redis
    root     12428  0.0  0.1 145252  2168 ?        Ssl  17:37   0:00 redis-server 127.0.0.1:6379
    root     12457  0.0  0.0 112660   968 pts/0    R+   17:38   0:00 grep --color=auto redis

    21.11 Redis持続化
  • 前言:データはメモリに格納され、読み取りと書き込みは非常に速いが、サーバを再起動したり、サービスを再起動したりすると、データが失われる.したがって,データが重要であれば,データ持続化を実施する必要がある.
  • Redisは、RDB(Redis DataBase)およびAOF(Append Only File)
  • の2つの永続化方式を提供する.
  • RDBは、簡単に言えば、redisに格納されたデータを異なる時点でスナップショットを生成し、ディスクなどのメディアに格納する.簡単に言えば、メモリのデータをミラー化し、ディスクに完全にマッピングして格納します.
  • の記憶方式はredisである.confのsaveパラメータは、格納方法を定義します.
  • example,
  • #   save ""
  • save 900 1
  • save 300 10
  • save 60 10000
  • がこの3つの条件を満たすと、永続化ストレージ
  • がトリガーされる.
  • 永続化を閉じるとsaveパラメータ条件をdeletedし、#save""注釈を削除する
  • に変更する.
  •  save ""
  • AOFは、redisが実行したすべての書き込み命令を記録し、次回のredis再起動時に、これらの書き込み命令を前から後まで繰り返し実行すれば、データ復旧を実現する角度を変えて永続化を実現しています.データは操作時間の増加に伴って増加します.
  • は、RDBとAOFの2つの方式を同時に使用することも可能である.この場合、redisが再起動されると、AOF方式の方がデータ復旧が優先される.これは、AOF方式の方がデータ復旧の完全性が高いためである.
  • AOFには3つの方法があります
  • appendfsync always#は書き続け、変更するたびに
  • と書きます.
  • appendfsync everysec#毎秒
  • を書く
  • appendfsync no#一定時間ごとに書く、最も安全ではない
  • データ永続化の必要がなければ、RDBとAOF方式を完全に閉じることもできます.そうすると、redisはmemcacheのように純粋なメモリデータベースになります.
  • 両者を比較し、AOF保存比較記憶は比較的安全である.

  • 21.12 Redisデータ型
    Redisデータ型-string
    stringは最も簡単なタイプで、Memcachedと同じタイプで、1つのkeyはvalueに対応して、そのサポートする操作はMemcachedの操作と似ていて、その機能はもっと豊富です.バイナリを保存できるオブジェクトを設定します.
    例:
    #redis-cli#redisを接続するコマンド、redis汎用エントリコマンド
    set単一key-valueの設定
    get単一値
    127.0.0.1:6379> set key1 10
    OK
    127.0.0.1:6379> get key1
    "10"
    #mset    key-value
    #mget   
    127.0.0.1:6379> mset key2 20 key3 30
    OK
    127.0.0.1:6379> mget key1 key2 key3
    1) "10"
    2) "20"
    3) "30"

    Redisデータ型-list
    Listはチェーンテーブル構造で、主な機能はpush、pop、1つの範囲のすべての値を取得するなどです.操作中keyはチェーンテーブルの名前として理解される.
    list構造を使用すると、最新のメッセージランキングなどの機能(例えば、新浪微博のTimeLine)を簡単に実現できます.
    Listのもう一つのアプリケーションはメッセージキューであり、listのpush操作を利用してタスクをlistに存在させ、ワークスレッドはpop操作でタスクを取り出して実行することができる.
    pushとpopは押し出し特性で、pushはk-vをlistに押して、それからpopは値を並べます
    例:
     # redis-cli 
    #lpush作用——kvを定義する
    127.0.0.1:6379> LPUSH list1 111
    (integer) 1
    127.0.0.1:6379> LPUSH list1 222
    (integer) 2
    127.0.0.1:6379> LPUSH list1 333
    (integer) 3
    #LRANGE  ,0 -1    
    127.0.0.1:6379> LRANGE list1 0 -1
    1) "333"
    2) "222"
    3) "111"
    #LPOP  ,   ,list        
    127.0.0.1:6379> LPOP list1
    "333"
    127.0.0.1:6379> LRANGE list1 0 -1
    1) "222"
    2) "111"

    Redisデータ型-set
    setは集合であり,我々の数学における集合概念と類似しており,集合の操作には削除要素を追加し,複数の集合に対して交差を求めるなどの操作がある.操作中keyは集合の名前として理解される.例えば、マイクロブログアプリケーションでは、1人のユーザーのすべての関心者を1つの集合に存在させ、そのすべてのファンを1つの集合に存在させることができる.Redisは非常に人間的に集合を求めるために交差、並列、差分などの操作を提供しているため、共通の関心、共通の好み、2度の友达などの機能を非常に容易に実現することができ、上のすべての集合操作に対して、異なるコマンドを使用して結果をクライアントに返すか、新しい集合に保存するかを選択することもできます.
    set例
    #SADD
    127.0.0.1:6379> SADD set1 1
    (integer) 1
    127.0.0.1:6379> SADD set1 2
    (integer) 1
    127.0.0.1:6379> SADD set1 3
    (integer) 1
    127.0.0.1:6379> SADD set1 a
    (integer) 1
    127.0.0.1:6379> SADD set1 b
    (integer) 1
    127.0.0.1:6379> SADD set2 2
    (integer) 1
    127.0.0.1:6379> SADD set2 3
    (integer) 1
    127.0.0.1:6379> SADD set2 4
    (integer) 1
    127.0.0.1:6379> SADD set2 a
    (integer) 1
    127.0.0.1:6379> SADD set2 b
    (integer) 1
    #SMEMBERS  key 
    127.0.0.1:6379> SMEMBERS set1
    1) "1"
    2) "a"
    3) "3"
    4) "2"
    5) "b"
    #SMEMBERS  key 
    127.0.0.1:6379> SMEMBERS set2
    1) "a"
    2) "4"
    3) "3"
    4) "2"
    5) "b"
    #SINTER    
    127.0.0.1:6379> SINTER set1 set2
    1) "a"
    2) "3"
    3) "2"
    4) "b"
    #SUNION   ,  
    127.0.0.1:6379> SUNION set1 set2
    1) "1"
    2) "a"
    3) "2"
    4) "b"
    5) "4"
    6) "3"
    #SDIFF    
    127.0.0.1:6379> SDIFF set1 set2
    1) "1"
    #SREM     
    127.0.0.1:6379> SREM set1 1
    (integer) 1
    127.0.0.1:6379> SMEMBERS set1
    1) "a"
    2) "3"
    3) "2"
    4) "b"

    説明:
    127.0.0.1:6379>SINTER set 1 set 2//交差同じ交差
    127.0.0.1:6379>SUION set 1 set 2//並集、set 1、set 2再結合
    127.0.0.1:6379>SDIFF set 1 set 2//差分セット、異なる要素
    127.0.0.1:6379>SREMset 1 c//要素の削除
    127.0.0.1:6379> SADD set2 a 2  b
    Redisデータ型-sort set
    sorted setは秩序化された集合であり、setよりも重みパラメータscoreを多くし、集合中の要素をscoreで秩序化することができる.例えば、クラス全員の成績を格納するSorted Setsであり、その集合valueは同級生の学号であり、scoreは試験の得点であり、データが集合に挿入されると、天然のソートが行われる.
    127.0.0.1:6379> ZADD set3 10 a
    (integer) 1
    127.0.0.1:6379> ZADD set3 20 "a-2"
    (integer) 1
    127.0.0.1:6379> ZADD set3 30 b
    (integer) 1
    127.0.0.1:6379> ZADD set3 40 b-2
    (integer) 1
    #  
    127.0.0.1:6379> ZRANGE set3 0 -1
    1) "a"
    2) "a-2"
    3) "b"
    4) "b-2"
    #  
    127.0.0.1:6379> ZREVRANGE set3 0 -1
    1) "b-2"
    2) "b"
    3) "a-2"
    4) "a"

    ソート時にscore値は表示されません
    Redisデータ型-hash
    Memcachedでは、構造化された情報をhashmapにパッケージ化し、クライアントのシーケンス化後にユーザーのニックネーム、年齢、性別、積分などの文字列の値(一般的にJSON形式)として格納することが多い. 

    書式:
    #HSET key value(複数要素)
    127.0.0.1:6379> HSET hash1 name kevin
    (integer) 1
    127.0.0.1:6379> HSET hash1 age 26
    (integer) 1
    127.0.0.1:6379> HSET hash1 job IT
    (integer) 1
    #HGET key value
    127.0.0.1:6379> HGET hash1 name
    "kevin"
    127.0.0.1:6379> HGET hash1 job
    "IT"
    127.0.0.1:6379> HGET hash1 age
    "26"
    #HGETALL     hash value
    127.0.0.1:6379> HGETALL hash1
    1) "name"
    2) "kevin"
    3) "age"
    4) "26"
    5) "job"
    6) "IT"