キャッシュデータベースのRedis - Redisの展開と構成

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

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

一般的に、レコードに配向に基づいて、リレーショナルモデルで作成されたデータベースの代理店、
オラクル、MySQLの、のSQLServer、DB2を含みます、

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

事故データベースの主流のリレーショナルデータベースに加えて、すべての人造非リレーショナルは
Redisのを含め、mongdb、HBaseの、couhdb

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

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

Redisのご紹介

実行およびサポートの永続性へのRedisベースのメモリ

キー値(キーと値のペア)を使用することの形で格納されています

利点:

  • 高速データの読み取りと書き込みと
  • 豊富なデータ型のサポート
  • 持続性のサポートデータ
  • 不可分性
  • これは、データのバックアップをサポートしています

インストールと設定のRedis

1、必要な環境のコンポーネントをインストールし、Redisのインストール

[root@localhost ~]# yum install gcc gcc-c++ make -y  ##安装环境组件
[root@localhost ~]# mkdir /mnt/tools
[root@localhost ~]# mount.cifs //192.168.100.100/tools /mnt/tools/  ##挂载
Password for root@//192.168.100.100/tools:  
[root@localhost ~]# cd /mnt/tools/redis/
[root@localhost redis]# ls
redis-5.0.7.tar.gz
[root@localhost redis]# tar xf redis-5.0.7.tar.gz -C /opt/   ##解压
[root@localhost redis]# cd /opt/
[root@localhost opt]# ls
redis-5.0.7  rh
[root@localhost opt]# cd redis-5.0.7/
[root@localhost redis-5.0.7]# make   #编译
..........//省略过程
[root@localhost redis-5.0.7]# make PREFIX=/usr/local/redis/ install   ##安装
..........//省略过程

2、設定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
##可执行文件路径
Selected config:
Port           : 6379
Config file    : /etc/redis/6379.conf
Log file       : /var/log/redis_6379.log
Data dir       : /var/lib/redis/6379
Executable     : /usr/local/redis/bin/redis-server
Cli Executable : /usr/local/redis/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful! 
[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      18004/redis-server  
[root@localhost utils]# /etc/init.d/redis_6379 stop  ##关闭redis
Stopping ...
Redis stopped
[root@localhost utils]# netstat -ntap | grep 6379   ##查看监听端口
tcp        0      0 127.0.0.1:6379          127.0.0.1:33970         TIME_WAIT   -   
[root@localhost utils]# /etc/init.d/redis_6379 start  ##开启redis
Starting Redis server...
[root@localhost utils]# netstat -ntap | grep 6379
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      18091/redis-server  
tcp        0      0 127.0.0.1:6379          127.0.0.1:33970         TIME_WAIT   -                   
[root@localhost utils]# 
[root@localhost utils]# vim /etc/redis/6379.conf   ##修改配置文件
bind 127.0.0.1 192.168.52.149  ##设置监听地址
[root@localhost utils]# /etc/init.d/redis_6379 restart  ##重启redis服务
Stopping ...
Redis stopped
Starting Redis server...

###Redis数据库基础操作

[root@localhost utils]# redis-cli -h 192.168.52.149 -p 6379   ##登录redis
192.168.52.149:6379> help @list    ##获取帮助列表

  BLPOP key [key ...] timeout
  summary: Remove and get the first element in a list, or block until one is available
  since: 2.0.0
...............................//省略部分内容
 RPUSHX key value
  summary: Append a value to a list, only if the list exists
  since: 2.2.0
192.168.52.149: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.52.149:6379> set name zhangsan   ##设置键值对
OK
192.168.52.149:6379> set net www
OK
192.168.52.149:6379> KEYS *   ##查看所有的键
1) "name"
2) "net"
192.168.52.149:6379> KEYS n??  ##查看键是n开头后面是两个字符的
1) "net"
192.168.52.149:6379> KEYS n*   ##查看键是n开头的
1) "name"
2) "net"
192.168.52.149:6379> GET net   ##查看键的值
"www"
192.168.52.149:6379> EXISTS net  ##查看键是否存在
(integer) 1     ##1是存在,0是不存在
192.168.52.149:6379> EXISTS nat
(integer) 0
192.168.52.149:6379> del net  ##删除键
(integer) 1
192.168.52.149:6379> KEYS *
1) "name"
192.168.52.149:6379> type name   ##查看键的类型
string
192.168.52.149:6379> rename name n1   ##给键重命名
OK
192.168.52.149:6379> KEYS *
1) "n1"
192.168.52.149:6379> get n1
"zhangsan"
192.168.52.149:6379> hset person score 80    ##用hash方式建立键值对
(integer) 1
192.168.52.149:6379> hset person name zhangsan   ##用hash方式建立键值对
(integer) 1
192.168.52.149:6379> hset person age 30   ##用hash方式建立键值对
(integer) 1
192.168.52.1490:6379> KEYS *
1) "person"
192.168.52.149:6379> hget person name   ##获取键的值
"zhangsan"
192.168.52.149:6379> hget person age   ##获取键的值
"30"
192.168.52.149:6379> set name lisi   ##获取键的值
OK
192.168.52.149:6379> KEYS *
1) "name"
2) "person"
192.168.52.149:6379> EXPIRE name 10   ##设置键的自动删除时间10s
(integer) 1
192.168.52.149:6379> KEYS *    ##10s内查看所有键
1) "name"
2) "person"
192.168.52.149:6379> KEYS *   ##10s后查看所有键
1) "person"
192.168.52.149:6379> exit   ##退出

図3に示すように、圧力測定

[root@localhost utils]# redis-benchmark -h 192.168.52.149 -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.13 seconds
    100 parallel clients
    3 bytes payload
    keep alive: 1
[root@localhost utils]# redis-benchmark -h 192.168.52.149 -p 6379 -q -d 100
    ##以字节形式指定set/get值的数据大小
    SET: 90497.73 requests per second
    GET: 90991.81 requests per second

他のライブラリー(合計ライブラリ16)に移動させる4、キー

[root@localhost utils]# redis-cli -h 192.168.52.149 -p 6379         ##进入Redis            
192.168.52.149:6379> KEYS *
1) "mylist"
2) "counter:__rand_int__"
3) "n1"
4) "key:__rand_int__"
5) "myset:__rand_int__"
192.168.52.149:6379> SELECT 10  ##进入第11个库
OK
192.168.52.149:6379[10]> KEYS *
(empty list or set)
192.168.52.149:6379[10]> SELECT 0  ##进入第1个库
OK
192.168.52.149:6379> MOVE n1 10  ##移动键值对到第11个库
(integer) 1
192.168.52.149:6379> KEYS *
1) "mylist"
2) "counter:__rand_int__"
3) "key:__rand_int__"
4) "myset:__rand_int__"
192.168.52.149:6379> SELECT 10  ##进入第11个库
OK
192.168.52.149:6379[10]> KEYS *   ## 查看键
1) "n1"
192.168.52.149:6379[10]> GET n1
"zhangsan"
192.168.52.149:6379[10]> FLUSHDB  ##清除库中数据
OK
192.168.52.149:6379[10]> KEYS *     ##查看所有键
(empty list or set)
192.168.52.149:6379[10]> SELECT 0   ##切换到第一个库
OK
192.168.52.149:6379>KEYS *      ##查看所有的键
1) "myset:__rand_int__"
2) "mylist"
3) "key:__rand_int__"
4) "counter:__rand_int__"
192.168.52.149:6379> exit
[root@localhost utils]# 

Redisの持続性

Redisのは、メモリ内のデータがオフに失われ、メモリ内で実行されている
、Redisのデータの後に再利用する、またはシステム障害を防ぐためにできることを、我々はディスクスペースのRedisにデータを書き込むために必要なことの持続性を

持続性の分類

  • RDBの方法:時間のRedis内のすべてのデータのコピーを取得する方法のスナップショットを作成
  • AOF方法:ファイルの最後に行いますWriteコマンドは、レコードデータの変更にログ道に書き込まれます

RDB持久化

デフォルトのRedisの永続モード
デフォルトのファイル名dump.rdb

トリガ条件:

  • 指定された時間間隔内に、書き込み操作の指定数(プロファイル制御)を行います
  • 保存実行またはbgsave(非同期)コマンド
  • すべてのデータのためのFlushallコマンド実行、空のデータベース
  • 通常のサーバーを確保するためのシャットダウンコマンドは、データの損失なしにシャットダウン

長所と短所:

  • 大規模なデータ回復のための適切な
  • データの整合性と一貫性のビジネスは聞かない場合は、RDBは良い選択です
  • データの整合性と一貫性は高くありません
  • 場合は、バックアップ用のメモリ

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

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

配置RDB持久化

[root@localhost utils]# vim /etc/redis/6379.conf 

#900秒之内至少一次写操作
save 900 1

#300秒之内至少发生10次写操作
save 300 10

#60秒之内发生至少10000次写操作
save 60 10000

#只要满足其一都会触发快照操作,注释所有的save项表示关闭RDB

#RDB文件名称
dbfilename dump.rdb

#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 

#开启AOF持久化
appendonly yes

#AOF文件名称
appendfilename "appendonly.aof"

#always:同步持久化,每次发生数据变化会立刻写入磁盘
# appendfsync always

#everysec:默认推荐,每秒异步记录次(默认值)
appendfsync everysec

#no:不同步,交给操作系统决定如何同步
# appendfsync no

#忽略最后一条可能存在问题的指令
aof-load-truncated yes

AOF書き換えメカニズム

AOFは、ファイルの冗長性の内容がより多くなり、ファイルに追加する書くことです働く
AOFファイルサイズがしきい値設定を超えた場合、Redisのは、AOFファイル圧縮の内容になります

書き換え原則AOF

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

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

[root@localhost utils]# vim /etc/redis/6379.conf 
#在日志进行BGREWRITEAOF时, 如果设置为yes表示新写操作不进行同步fsync,
#只暂存在缓冲区里,避免造成磁盘I0操作冲突,等重写完成后在写入。redis中默认为no
no-appendfsync-on-rewrite no

#当前AOF文件大小是上次日志重写时AOF文件大小两倍时,发生BGREWRITEAOF操作
auto-aof-rewrite-percentage 100

#当前AOF文件执行BGREWRITEAOF命令的最小值,
#避免刚开始启动Reids时由于文件尺寸较小导致频繁的BGREWRITEAOF
auto-aof-rewrite-min-size 64mb

Redisのパフォーマンス管理

##查看redis内存使用
[root@localhost utils]# /usr/local/redis/bin/redis-cli
127.0.0.1:6379> info memory

メモリの断片化率

●used_オペレーティングシステムのメモリを割り当て値メモリ RSSメモリの値が使用さRedisので割られる
使用済み
_memory計算
による物理メモリへのオペレーティングシステムの非効率的な配分/回復で●メモリの断片化は、
連続した物理メモリの割り当てではありません
●トラックメモリの断片化率理解Redisのインスタンスリソースの性能が非常に重要であり、
合理的である1よりもわずかに大きいメモリの断片化率は、この値は、メモリの断片化率が比較的低い示す
メモリフラグメンテーション比が1.5を超えると、記載のRedisは、前記50%、実際のニーズに物理メモリの150%を消費しメモリの断片である
Redisのメモリ割り当てを示す1以上のメモリの断片化の速度は、物理メモリを超える、オペレーティング・システムであるスワッピング

メモリ使用量

●メモリ使用量は、インスタンスは、オペレーティング・システムが始まります利用可能な最大メモリを超えRedisの
メモリとスワップ空間スワップ
●避けメモリは、スワップ
選択し、キャッシュされたデータのサイズのために
可能な限りハッシュデータ構造を使用して、
鍵の有効期限を設定します

回復キー

●確実に限られた資源のRedisメモリの合理的な配分
●メモリ使用量が最大しきい値設定に達すると、あなたがのキーリカバリの戦略を選択する必要があり
、既定の回復ポリシーを削除することは許可されていません
redis.confプロファイルの変更maxmemoryポリシーのプロパティ値

  • 揮発性-LRU:データ収集のセットアウト有効期限からのデータを使用して、LRUアルゴリズム
  • 揮発性-TTL:フェーズアウトからデータを期限切れの選択は、データ収集の有効期限を設定している(推奨)
  • 揮発性ランダム:ランダムデータ収集のデータアウト有効期限のセットから選択
  • allkeys-LRU:LRUアルゴリズムで定められた全てのデータからのデータを使用して
  • allkeysランダム:データからデータを選択するには、任意のアウトセット
  • 無enviction:データのうち禁止

おすすめ

転載: blog.51cto.com/14449541/2460723