文章目录
NoSQL相关概念
RDBMS
- 关系数据库管理系统
-Relational Database Management System
-按照预先设置的组织结构,将数据存储在物理介质上
-数据之间可以做关联操作 - 主流的RDBMS软件
-MySQL
-MariaDB
-Oracle
-DB2
-SQL Server
NoSQL
- NoSQL=Not Only SQL
-意思是"不仅仅是SQL"
-泛指非关系型数据库
-不需要预先定义数据存储结构
-每条记录可以有不同的数据类型和字段个数 - 主流软件
-Memcached
-Redis
-MongoDB
-CouchDB
-Neo4j
-FlockDB
部署Redis服务器
Redis介绍
-Remote Dictionary Server
-是一款高性能的(Key/Values)分布式内存数据库
-支持数据持久化(定期把内存里数据存储到硬盘)
-支持多种数据类型string,list,hash…
-支持master-slave模式数据备份
-中文网站www.redis.cn
源码编译安装
yum -y install gcc
tar -zxf redis-4.0.8.tar.gz
cd redis-4.0.8/
ls
00-RELEASENOTES CONTRIBUTING deps Makefile README.md runtest runtest-sentinel src utils
BUGS COPYING INSTALL MANIFESTO redis.conf runtest-cluster sentinel.conf tests
make && make install
初始配置
./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/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/bin/redis-server //启动程序的目录
Cli Executable : /usr/local/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! //提示安装成功
服务基本使用
管理服务
/etc/init.d/redis_6379 status //查看服务状态
/etc/init.d/redis_6379 stop //停止服务
/etc/init.d/redis_6379 start //启动服务
ps -C redis-server //查看进程
ss -pantu | grep :6379 //查看端口
连接服务
redis-cli //默认连接127.0.0.1地址的 6379端口
127.0.0.1:6379> ping
PONG //PONG说明服务正常
Redis常用命令
-set key名 key值 存储1个key值
-mset key名列表 存储多个key值
-get key名 获取key值
-mget key名1 key名2… 获取多个key值
-select 数据库编号0-15 切换库
-keys * 显示当前库所有key名
-keys a? 显示当前库指定key名
-exists key名 测试key名是否存在
-ttl key名 查看key生存时间(-1代表永久有效,-2代表变量过期了)
-type key名 查看key类型
-move key名 库编号 移动key库到指定库
-expire key名 数字 设置key有效时间(单位秒)
-del key名 删除指定的key
-flushall 删除内存里所有key
-flushdb 删除所在库的所有key
-save 保存所有key到硬盘
-shutdown 停止服务
配置文件解析
配置分类
文件 | 说明 |
---|---|
主配置文件 | /etc/redis/6379.conf |
日志文件 | /var/log/redis_6379.log |
数据库目录 | /var/lib/redis/6379 |
服务启动程序 | /usr/local/bin/redis-server |
命令行连接命令 | /usr/local/bin/redis-cli |
常用配置
配置 | 说明 |
---|---|
port 6379 | 端口 |
bind 127.0.0.1 | IP地址 |
daemonize yes | 守护进程方式运行 |
databases 16 | 数据库个数 |
logfile /var/log/redis_6379.log | 日志文件 |
maxclients 10000 | 并发连接数量 |
dir /var/llib/redis/6379 | 数据库目录 |
内存管理
- 内存清除策略
LRU means Least Recently Used
LFU means Least Frequently Used
配置 | 说明 |
---|---|
volatile-lru | 最近最少使用(针对设置了TTL(剩余生存时间)的key) |
volatile-lfu | 针对设置了TTL的key中清除使用频率最少key) |
allkeys-lru | 删除最少使用的key(针对所有的key) |
allkeys-lfu | 从所有key中清除使用频率最少的key |
volatile-random | 在设置了TTL的key里随机移除 |
allkeys-random | 随机移除key |
volatile-ttl(minor TTL) | 移除最近过期的key |
noeviction | 不删除 |
- 优化设置
配置 | 说明 |
---|---|
manmemory | 最大内存 |
maxmemory-policy | 定义使用策略 |
maxmemory-samples | 选取key模板的个数(针对lru和ttl策略) |
修改Redis服务运行参数
- 修改主配置文件
cp /etc/redis/6379.conf /root/6379.conf #可以先备份一份,防止修改错误没法还原
/etc/init.d/redis_6379 stop
vim /etc/redis/6379.conf
.......
bind 192.168.4.50 #设置服务使用的ip
port 6350 #更改端口号
requirepass 123456 #设置密码
- 修改启动脚本
vim +43 /etc/init.d/redis_6379
$CLIEXEC -h 192.168.4.50 -p 6350 -a 123456 shutdown
- 测试
/etc/init.d/redis_6379 start
netstat -utnlp | grep redis-server
redis-cli -h 192.168.4.50 -p 6350 [-a 123456] #访问服务
192.168.4.50:6350>auth 123456 #输入密码(访问时没填密码)
192.168.4.50:6350>ping
PONG
持久化(数据恢复)
RDB
RDB介绍
- Redis数据库文件,全称Redis DataBase
–数据持久化方式之一
–数据持久化默认方式
–按照指点时间间隔,将内存中的数据集快照写入硬盘 - 定义RDB文件名
–dbfilename “dump.rdb” #文件名
使用RDB文件
- 备份数据
–备份dump.rdb文件到其他位置
cp 数据库目录/dump.rdb 备份目录
- 恢复数据
–拷贝备份文件到数据库目录,启动redis服务
cp 备份目录/dump.rdb 数据库目录/
RDB优化设置
- 数据从内存保存到硬盘的频率
–save 900 1 #900秒内且有1个key改变
–save 300 10 #300秒内且有10个key改变
–save 60 10000 #60秒内且有10000个key改变 - 手动存盘
–save #阻塞写存盘
–bgsave #不阻塞写存盘
RDB优点和缺点
- RDB优点
–高性能的持久化实现—创建一个子进程来执行持久化,先将数据写入临时文件,持久化过程结束后,再用这个临时文件替换上次持久化好的文件;过程中主进程不做任何IO操作
–比较适合大规模数据恢复,且对数据完整性要求不是非常高的场合 - RDB的缺点
–意外宕机后,丢失最后一次持久化的所有数据
AOF
AOF介绍
- Append Only File
–追加方式记录写操作的文件
–记录redis服务所有写操作
–不断的将新的写操作,追加到文件的末尾
–默认没有启动
–使用cat命令可以查看文件内容 - 启动AOF
192.168.4.51:6351>config set appendonly yes #启用aof,默认no
192.168.4.51:6351> config rewrite #写进配置文件
使用AOF文件恢复数据
- 备份数据
–备份appendonly.aof文件到其他位置
cp 数据库目录/applendonly.aof 备份目录
- 恢复数据
–拷贝备份文件到数据库目录
–启动redis服务
cp 备份目录/appendonly.aof 数据库目录
/etc/redis/redis_端口 start
AOF优化配置
- 定义文件名
vim +673 /etc/redis/6379.conf
appendonly yes #启用AOF
appendfilename "appendonly.aof" #指定文件名
- AOF文件记录写操作的方式
三选一,默认是appendfsync everysec
vim /etc/redis/6379.conf
# appendfsync always //时时记录,并完成磁盘同步
appendfsync everysec //每秒记录一次,并完成磁盘同步
# appendfsync no //写入aof.不执行磁盘同步
- 日志文件会不断增大,何时触发日志重写?
vim +744 /etc/redis/6379.conf
auto-aof-rewrite-percentage 100 #再次重写,增长百分比
auto-aof-rewrite-min-size 64mb #首次重写触发值
- 修复AOF文件
–把文件恢复到最后一次的正确操作
redis-check-aof --fix /var/lib/redis/6379/appendonly.aof
0x 8b: Expected prefix '*', got: 'd'
AOF analyzed: size=153, ok_up_to=139, diff=14
This will shrink the AOF from 153 bytes, with 14 bytes, to 139 bytes
Continue? [y/N]: y
Successfully truncated AOF
AOF优点与缺点
- AOF优点
–可以灵活设置持久化方式
–出现意外宕机时,仅可能丢失1秒的数据 - AOF
–持久化文件的体积通常会RDB方式
–执行fsync策略时的速度可能会比RDB方式慢
与网站服务一起使用(LNMP+Redis)
部署LNMP环境
在主机192.168.4.57部署LNMP环境
yum -y install mariadb mariadb-server
1.安装源码nginx软件及php-fpm
yum -y install gcc pcre-devel(提供正则匹配) zlib-devel(提供无损数据压缩) #安装依赖
tar -zxvf nginx-1.12.2.tar.gz #解压
cd nginx-1.12.2 #进源码目录
./configure
make && make install
yum -y install php-fpm #安装php-php
2.修改配置nginx.conf
vim +65 /usr/local/nginx/conf/nginx.conf
......
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
......
/usr/local/nginx/sbin/nginx -t #测试修改
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
3.启动服务
php-fpm服务
systemctl start php-fpm #启动服务
netstat -utnlp | grep :9000 #查看端口
nginx服务
/usr/local/nginx/sbin/nginx
netstat -utnlp | grep :80
测试配置
vim /usr/local/nginx/html/test.php
<?php
echo "hello world!!!";
?>
curl http://localhost/test.php
hello world!!!
配置PHP支持redis
1.安装php扩展
yum -y install php php-devel php-mysql automake autoconf
tar -zxf php-redis-2.2.4.tar.gz
cd phpredis-2.2.4/
phpize #生成配置文件php-config及 configure命令
./configure --with-php-config=/usr/bin/php-config
make && make install
2.修改php.ini文件
vim /etc/php.ini
728 extension_dir = "/usr/lib64/php/modules/" #模块文件目录
730 extension = "redis.so" #模块文件名
systemctl restart php-fpm #重启php-fpm服务
php -m | grep -i redis #查看已加载的模块
3.测试配置:修改网站脚本,把数据存储到redis服务器192.168.4.50
a)查看192.168.4.50主机的redis服务器是否运行
netstat -utnlp | grep redis-server
redis-cli -h 192.168.4.50 -p 6350 -a 123456
192.168.4.50:6350> ping
PONG
192.168.4.50:6350> exit
b)编写网站脚本(192.168.4.57)
vim /usr/local/nginx/html/linkredis.php
<?php
$redis = new redis();
$redis->connect("192.168.4.50","6350");
$redis->auth("123456");
$redis->set("linux","redhat");
echo $redis->get("linux");
?>
c)访问网站脚本
curl http://localhost/linkredis.php #访问nginx服务
redhat
d)在192.168.4.50 服务器,查看数据
redis-cli -h 192.168.4.50 -p 6350 -a 123456
192.168.4.50:6350> keys * #查看变量
1) "linux"
192.168.4.50:6350> get linux #获取值
"redhat"