リレーショナルデータベースと非リレーショナルデータベース
リレーショナルデータベース:
一般的に、レコードに配向に基づいて、リレーショナルモデルで作成されたデータベースの代理店、
オラクル、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:データのうち禁止