NoSQLのRedisのインストール構成の最適化(+実践理論)

リレーショナルデータベースと非リレーショナルデータベース

リレーショナルデータベース

  • レコードのように - に基づいて、リレーショナル・モデルで作成された構造化データベース、
  • などのOracle、MySQLの、SQL Serverの、Microsoft Accessの、DB2、含みます

非リレーショナルデータベース

  • 主流のリレーショナルデータベースのデータベース外部に加えて、非リレーショナル考えられています
  • Redisの、MongBD、HBaseの、CouhDBなどを含みます

非リレーショナルデータベースの背景

  • 同時読み取りと書き込みのデータベースのための高performance--需要が高いです
  • 大量のデータのための巨大なStorage--効率的なストレージおよびアクセス要件
  • 高いスケーラビリティ&&高Availability--データベース高いスケーラビリティと高可用性の要件

Redisのご紹介

  • 実行およびサポートの永続性へのRedisベースのメモリ
  • キー値(キーと値のペア)を使用することの形で格納されています
  • 利点
    • 高速データの読み取りと書き込みと
    • 豊富なデータ型のサポート
    • 持続性のサポートデータ
    • 不可分性
    • これは、データのバックアップをサポートしています

Redisの設定ファイル

構成パラメータ(/etc/redis/6379.conf)

  • バインド:ホストアドレスをリスニング
  • ポート:ポート
  • はいデーモン化:デーモンを有効にします
  • pidファイル:指定PIDファイル
  • ログレベルの通知:ログレベル
  • ログファイル:指定されたログファイル

サービスが練習をセットアップします

インストールサービス環境のコンポーネントとアーカイブをマウントし、コンパイルし、Redisのインストール

[root@localhost ~]# yum install gcc gcc-c++ make -y         //安装环境组件
[root@localhost ~]# mount.cifs //192.168.100.3/LNMP-C7 /mnt/     //挂载软件包
Password for root@//192.168.100.8/LNMP-C7:  
[root@localhost ~]# cd /mnt/
[root@localhost mnt]# tar zxvf redis-5.0.7.tar.gz -C /opt/      //解压
[root@localhost mnt]# cd /opt/redis-5.0.7/
[root@localhost redis-5.0.7]# make                     //编译
[root@localhost redis-5.0.7]# make PREFIX=/usr/local/redis/ install     //安装

構成プロファイルスクリプトを実行するためのRedisし、Configure

[root@localhost redis-5.0.7]# cd utils/
[root@localhost utils]# ./install_server.sh       //执行脚本进行配置
Welcome to the redis service installer
This script will help you easily set up a running redis server

Please select the redis port for this instance: [6379]       //默认端口号
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf]     //配置文件存放位置
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log]       //日志文件存放位置
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379]      //数据文件存放位置
Selected default - /var/lib/redis/6379
Please select the redis executable path [] /usr/local/redis/bin/redis-server     //可执行文件路径
[root@localhost utils]# ln -s /usr/local/redis/bin/* /usr/local/bin/       //制作链接文件便于系统识别
[root@localhost utils]# netstat -ntap | grep 6379                    //查看端口是否开启
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      44510/redis-server  
[root@localhost utils]# /etc/init.d/redis_6379 stop              //关闭redis命令
Stopping ...
Redis stopped
[root@localhost utils]# /etc/init.d/redis_6379 start                //开启redis命令
Starting Redis server...
[root@localhost utils]# vim /etc/redis/6379.conf       //修改配置文件
bind 127.0.0.1 192.168.144.128                         //配置监听地址
[root@localhost utils]# /etc/init.d/redis_6379 restart      //重启redis服务
Stopping ...
Redis stopped
Starting Redis server...

Redisのデータベースよく使用するコマンド

Redisの-CLIコマンドラインツール

  • ローカルデータベース接続
    [root@localhost utils]# /usr/local/redis/bin/redis-cli
    127.0.0.1:6379>
  • リモート・データベースに接続します
    [root@localhost utils]# redis-cli -h 192.168.144.128 -p 6379
    192.168.144.128:6379>
  • コマンドのヘルプを取得します。

    192.168.144.128:6379> help set  ##help帮助
    
    SET key value [expiration EX seconds|PX milliseconds] [NX|XX]
    summary: Set the string value of a key
    since: 1.0.0
    group: string
  • セット:データを保存します
    192.168.144.128:6379> set teacher zhangsan
    OK
    192.168.144.128:6379> set tea red
    OK
  • 取得:データを取得します

    192.168.144.128:6379> get tea   ##查看键的值
    "red"

    鍵関連するコマンド

  • キー:キーのリストのルールに沿って取得
    127.0.0.1:6379> keys *       //查看当前数据库中所有的键
    127.0.0.1:6379> keys V*      //查看当前数据库中以v开头的键
    127.0.0.1:6379> keys v?      //查看当前数据库中以v开头后面包含任意一个字符的键
    127.0.0.1:6379> keys v??     //查看当前数据库中以v开头后面包含任意二个字符的键
    192.168.144.128:6379> KEYS *   ##查看所有的键
    1) "teacher"
    2) "tea"
    192.168.144.128:6379> keys t??  ##查看键是t开头后面是两个字符的
    1) "tea"
  • 存在する:キーがあるかどうかを判断します
    192.168.144.128:6379> EXISTS tea
    (integer) 1                  //1是存在
    192.168.144.128:6379> EXISTS teas
    (integer) 0                  //0是不存在
  • デル:現在の指定されたキーのデータベースを削除します
    192.168.144.128:6379> del teacher  ##删除键
    (integer) 1
    192.168.144.128:6379> KEYS *
    1) "tea"
  • タイプ:キー値の型に対応する値を取得します。
    192.168.144.128:6379> type tea   ##查看键的类型
    string
  • 名前の変更(カバー)/ renamenx(カバーされていない):既存のキーの名前変更
    192.168.144.128:6379> rename tea t1   ##给键重命名
    OK
    192.168.144.128:6379> keys *
    1) "t1"
    192.168.144.128:6379> get t1
    "red"
  • DBSIZE:ビューキー現在のデータベースの数
    192.168.144.128:6379> dbsize
    (integer) 1
  • Redisのベンチマークテストツール
    • -h:指定サーバのホスト名
    • -p:指定サーバのポート
    • -c:指定同時接続数
    • -n:指定した要求の数
    • -d:バイト単位のデータサイズSET / GETの値を指定します
    • -q:強制立ち上げたのRedis。唯一のクエリ/秒の値を表示します
[root@localhost utils]# redis-benchmark -h 192.168.144.128 -p 6379 -c 100 -n 100000     //并发100,100000个请求
====== SET ======
100000 requests completed in 1.14 seconds        //请求花费的时间
100 parallel clients
3 bytes payload
keep alive: 1

84.66% <= 1 milliseconds
98.48% <= 2 milliseconds
99.69% <= 3 milliseconds
99.90% <= 18 milliseconds
100.00% <= 18 milliseconds
87642.41 requests per second

====== GET ======
100000 requests completed in 1.144 seconds
100 parallel clients
3 bytes payload
keep alive: 1
[root@localhost utils]# redis-benchmark -h 192.168.144.128 -p 6379 -q -d 100        //以字节形式指定set/get值的数据大小
SET: 90497.73 requests per second
GET: 90991.81 requests per second

マルチデータベース操作をRedisの

  • Redisのは、名前の付いた、デフォルトでサポートされている16個のデータベースを複数のデータベースをサポートしています0-15
  • マルチデータベースの独立した、非干渉
  • マルチデータベース、一般的に使用されるコマンド
    • 複数のデータベース間の切り替え
      192.168.144.128:6379> select 10       //进入第11个库
      OK
      192.168.144.128:6379[10]> keys *
      (empty list or set)
      192.168.144.128:6379[10]> select 0         //进入第1个库
      OK
    • 複数のデータベース間でデータを移動します
      192.168.144.128:6379> move t1 10       //移动键值对到第11个库
      (integer) 1
      192.168.144.128:6379> select 10        //进入第11个库
      OK
      192.168.144.128:6379[10]> keys *       //查看键
      1) "t1"
      192.168.144.128:6379[10]> get t1
      "red"
  • データベース内のデータを消去します
    192.168.144.128:6379[10]> flushdb          //清除库中数据
    OK
    192.168.144.128:6379[10]> keys *            //查看所有键
    (empty list or set)

    Redisの持続性

持続性の概要

  • Redisのは、メモリ内のデータがオフに失われ、メモリ内で実行されています
  • Redisのデータを再利用する、またはシステム障害を防ぐためにできるようにするために、我々は、ディスクスペースのRedisにその持続性をデータを作成する必要があります

分類の持続性

  • RDBの方法:時間のRedis内のすべてのデータのコピーを取得する方法のスナップショットを作成
    • 長所:低リソース消費
    • 短所:リアルタイムデータが保存されている保証することはできません
  • AOF方法:ファイルの最後に行いますWriteコマンドは、レコードデータの変更にログ道に書き込まれます

    • 利点:リアルタイムデータ
    • 短所:大規模な資源の枯渇、データ同期時間のロスが長すぎます

      RDB持久化

  • デフォルトのRedisの永続性モード
  • デフォルトのファイル名dump.rdb
  • トリガ条件
    • 指定された時間間隔内に、書き込み操作の指定数(プロファイル制御)を行います
    • 保存実行またはbgsave(非同期)コマンド
    • Flushallコマンド実行、データベース内のすべてのデータを空に(推奨されません)
    • 通常のサーバーを確保するためのシャットダウンコマンドは、データの損失なしにシャットダウン
  • 長所と短所
    • 大規模なデータ回復のための適切な
    • データの整合性と一貫性のビジネスは聞かない場合は、RDBは良い選択です
    • データの整合性と一貫性は高くありません
    • 場合は、バックアップ用のメモリ

RDBのデータファイルのリカバリ

  • binディレクトリのdump.rdb Redisのインストールディレクトリにファイルをコピーし、Redisのにサービスを再起動します
  • プロファイルオプション

    [root@localhost utils]# vim /etc/redis/6379.conf 
    save 900 1                    //900秒之内至少一次写操作
    save 300 10                   //300秒之内至少发生10次写操作
    save 60 10000                 //60秒之内发生至少10000次写操作;只要满足其一都会触发快照操作,注释所有的save项表示关闭RDB
    dbfilename dump.rdb           //备份文件名称
    dir /var/lib/redis/6379       //备份文件保存目录
    rdbcompression yes            //开启压缩

    AOFの永続性

  • Redisのは、デフォルトでオンになっていません
  • RDBの不足を補う(データの矛盾)
  • 各書き込み動作ログレコードの形式では、ファイルに追加
  • Redisのは、背中にデータを完了するために、過去に一度復旧作業を実行するために、ログファイルの内容に基づいて、書き込みコマンドを再起動します

データファイルの回復によるとAOF

  • Redisのインストールディレクトリappendonly.aof binディレクトリにファイルをコピーするには、サービスのRedisを再起動することができます
  • AOF持続性の設定

    [root@localhost utils]# vim /etc/redis/6379.conf 
    appendonly yes          //开启AOF持久化
    appendfilename "appendonly.aof"       //AOF文件名称
    # appendfsync always                //always:同步持久化,每次发生数据变化会立刻写入磁盘
    appendfsync everysec                //everysec:默认推荐,每秒异步记录次(默认值)
    # appendfsync no                    //no:不同步,交给操作系统决定如何同步
    aof-load-truncated yes              //忽略最后一条可能存在问题的指令

    AOF書き換えメカニズム

  • AOFがファイルに追加に書き込みをされて動作しますが、ファイルの冗長性の内容は、より多くなります
  • AOFファイルのサイズが設定された閾値を超えた場合、Redisのは、AOFファイル圧縮の内容であろう

書き換え原則AOF

  • Redisのは、(古いファイルを読み取ることではない)メモリ内のデータを読み取るための、新しいプロセスをフォークし、一時ファイルに書き換えられ、最終的に古いAOFファイルを置き換えます

AOFは、設定を書き換えます

[root@localhost utils]# vim /etc/redis/6379.conf 
no-appendfsync-on-rewrite no        
//在日志进行BGREWRITEAOF时, 如果设置为yes表示新写操作不进行同步fsync,只暂存在缓冲区里,避免造成磁盘I0操作冲突,等重写完成后在写入。redis中默认为no
auto-aof-rewrite-percentage 100     
//当前AOF文件大小是上次日志重写时AOF文件大小两倍时,发生BGREWRITEAOF操作
auto-aof-rewrite-min-size 64mb   
//当前AOF文件执行BGREWRITEAOF命令的最小值,避免刚开始启动Reids时由于文件尺寸较小导致频繁的BGREWRITEAOF

Redisのパフォーマンス管理

Redisのビューメモリ使用量

[root@localhost utils]# /usr/local/redis/bin/redis-cli
127.0.0.1:6379> info memory

メモリの断片化率

  • Redisのメモリに分割されるオペレーティングシステムのメモリを割り当て値はused_memory_rss値算出used_memoryを使用しました
  • メモリの断片化が原因の物理メモリへの非効率的なディスペンシング・OS /回復で
    • 不連続物理メモリの割り当て
  • 理解Redisのインスタンスリソースのパフォーマンスのトラッキングメモリの断片化率が非常に重要です

    • 1は合理的であるよりもわずかに大きいメモリの断片化の速度は、この値はメモリの断片化率が比較的低い示し
    • メモリの断片化の比率が1.5を超えると、メモリの断片化率が50%であるのRedisは、物理メモリの実際のニーズの150%を消費する説明
    • Redisのメモリ割り当てを示す1未満のメモリの断片化の速度は、オペレーティングシステムがスワップされ、物理メモリを超え

    メモリ使用量

    • Redisのメモリ使用量が最大メモリの利用可能な例を超えて、オペレーティングシステムが開始され
    • メモリとスワップ領域スワップ
  • 避けメモリスワッピング

    • データ・キャッシュ・サイズの選択のための
    • できるだけ利用ハッシュデータ構造
    • キーの有効期限を設定します

    回復キー

    • Redisの限られたメモリ資源の合理的な配分を確保
    • 最大メモリ使用量は、設定されたしきい値に達すると、キー回復のための戦略を選択する必要があります
    • デフォルトでは、回復ポリシーが削除禁止されています
    • redis.confプロファイルの変更maxmemoryポリシー属性値
    • 揮発性-LRU:データ収集のセットアウト有効期限からのデータを使用して、LRUアルゴリズム
    • 揮発性-TTL:フェーズアウトからデータを期限切れの選択は、データ収集の有効期限を設定している(推奨)
    • 揮発性ランダム:ランダムデータ収集のデータアウト有効期限のセットから選択
    • allkeys-LRU:LRUアルゴリズムで定められた全てのデータからのデータを使用して
    • allkeysランダム:データからデータを選択するには、任意のアウトセット
    • 無enviction:データのうち禁止

おすすめ

転載: blog.51cto.com/14473285/2461181