关系型数据库
- 一个结构化的数据库,创建在关系模型基础,上,-般面向于记录
- 包括Oracle、MySQL、 SQL Server、Microsoft Access、DB2等
非关系型数据库
- 除了主流的关系型数据库以外的数据库, 都认为是非关系型的
- 包括Redis、MongBD、 Hbase、 CouhDB等
非关系型数据库产生背景
- High performance——对数据库高并发读写需求
- Huge Storage——对海量数据高效存储与访问需求
- High Scalability && High Availability——对数据库高可扩展性与高可用性需求
Redis简介
- Redis基于内存运行并支持持久化
- 采用key-value (键值对)的存储形式
- 优点
- 具有极高的数据读写速度
- 支持丰富的数据类型
- 支持数据的持久化
- 原子性
- 支持数据备份
Redis配置文件
配置参数(/etc/redis/6379.conf)
- bind:监听的主机地址
- port:端口
- daemonize yes:启用守护进程
- pidfile:指定PID文件
- loglevel notice:日志级别
- logfile:指定日志文件
服务搭建实践
安装服务环境组件,并挂载压缩包,编译安装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配置文件脚本,并进行配置
[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
- set:存放数据
192.168.144.128:6379> set teacher zhangsan
OK
192.168.144.128:6379> set tea red
OK
-
get:获取数据
192.168.144.128:6379> get tea ##查看键的值
"red"
key相关命令
- keys:获取符合规则的键值列表
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"
- exists:判断键值是否存在
192.168.144.128:6379> EXISTS tea
(integer) 1 //1是存在
192.168.144.128:6379> EXISTS teas
(integer) 0 //0是不存在
- del:删除当前数据库的指定key
192.168.144.128:6379> del teacher ##删除键
(integer) 1
192.168.144.128:6379> KEYS *
1) "tea"
- type:获取key对应的value值类型
192.168.144.128:6379> type tea ##查看键的类型
string
- rename(覆盖) / renamenx (不覆盖) :对已有的key进行重命名
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:查看当前数据库中key的数目
192.168.144.128:6379> dbsize
(integer) 1
- redis-benchmark测试工具
- -h:指定服务器主机名
- -p:指定服务器端口
- -c:指定并发连接数
- -n:指定请求数
- -d:以字节的形式指定SET/GET值的数据大小
- -q:强制推出redis。仅显示query/sec值
[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是运行在内存中,内存中的数据断电丢失
- 为了能够重用Redis数据,或者防止系统故障,我们需要将Redis中的数据写入到磁盘空间中,即持久化
持久化的分类
通过RDB文件恢复数据
根据AOF文件恢复数据
AOF重写的原理
- Redis会fork出一条新进程,读取内存中的数据(并没有读取旧文件),并重新写到一个临时文件中,最后替换旧的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
内存碎片率