NoSQL
全名 Not Only SQL 指的是非关系型数据库
部署 Redis 服务
1. 安装 Redis 对源码包进行编译安装,资源中的包解压后即可编译安装,不需要配置,因为已经生成了一个Makefile文件 2. 配置初始化 : 运行脚本程序 源码包解压位置/utils/install_server.sh
# 定义端口号
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! # 安装成功
3. 启动服务
# 启动服务
/etc/init.d/redis_6379 start
# 查看启动状态
/etc/init.d/redis_6379 status
# 停止服务
/etc/init.d/redis_6379 stop
4. 连接 使用命令 redis-cli 进入控制模式
redis-cli -h 连接IP -p 端口 -a 密码(如果有的话)
数据库redis的基本知识
1. 存在内存中,隔一段时间存到磁盘中,也可以手动存盘
2. 如果存到磁盘,那么数据存储在/var/lib/redis/6379/dump.rdb文件下,每次启动redis服务,都会读取里面的数据信息
3. 默认有16个表,代表的方式就是编号,0 - 15,在配置文件中可以修改其个数
4. 当radis服务停止的时候,会自动执行存盘操作,但是flushall会删除磁盘中的数据
redis操作命令
set 变量名 变量值 | 存储变量 |
get 变量名 | 获取变量 |
select 数据库编号 | 切换库 |
keys * | 打印所有变量 |
keys 具体字符* | 打印指定变量 |
*代表任意多个任意字符 | |
?代表一个任意字符 | |
exists 变量名 | 测试变量是否存在 |
expire 变量名 10 | 设置变量有效时间 |
ttl 变量名 | 查看变量剩余的有效时间 |
-2 代表 已经失效 ||| -1 代表 永久有效 ||| 正整数 代表还有多少秒就失效 | |
type keyname | 查看变量类型 |
move 变量名 表编号 | 将变量移动到其他表中 |
del 变量名 | 删除变量 |
flushall | 删除所有变量,注意这个命令也会删除磁盘中的数据 |
flushdb | 清除当前库的没有的数据 |
save | 保存所有变量到磁盘中 |
shutdown | 关闭redis服务,并且会保存当前所有变量到磁盘中 |
修改配置文件(里面注释很多,有用的只有下面几个参数)
port 端口号码 | |
bind 本机的IP地址(默认是lo回环地址) | |
tcp-backlog | 设置tcp连接总数 |
timeout | 连接超时间 |
tcp-keepalive | 设置长连接时间 |
当连接过程中,客户端长时间不操作,当达到长连接时间限度的时候,服务器会向客户端发送一个确认包,如果客户端回复了,那服务器不会自动断开,如果没有回应,那么就会断开连接 | |
daemonize | 守护进程,如果是yes那就会一直有程序监听着,如果是no隔一段时间进程会休眠 |
logfile /var/log/redis_6379.log | 指定PID记录文件 |
databases | 指定数据库的个数 |
maxclients | 并发连接数量,默认被注释了,解除注释就可以修改了 |
dir | 指定数据库存放目录 |
requirepass | 设置登陆密码,默认被注释了 |
如果没有密码,在登陆的时候,写了-a也没关系,没有密码,不管-a后面加了什么字符都可以登陆并操作 |
内存策略 | |
volatile-lru | 最近最少使用,只有设置了有效时间的快要过期的变脸删除 |
allkeys-lru | 不管也没有设置有效时间,只要用的最少的变量就删除 |
volatile-random | 在有设置有效时间的变量中随机删除 |
allkeys-random | 不管也没有设置有效时间,都会被随机删除 |
volatile-ttl | 移除有效期时间到的变量 |
noeviction | 全部不删除,内存写满的时候报错,默认是这个策略,不过这个策略不好,必须修改 |
内存策略的配置文件设置 | |
maxmemory | 最大内存设置,默认被注释了 |
maxmemory-policy 内存策略 | 定义使用的策略,默认是noevication |
maxmemory-samples 个数 | 选取模板数据个数,这是针对内存策略的,越多模板,内存策略越合理 |
关于内存做一些基本解释
具体配置中只有max那三行是有效的,而介绍了6种内存策略,下面我来说说,内存策略何时触发,如何触发:
首先,要区别开有效时间,当变量有效时间到的时候就会注销变量,而内存策略是当内存大道既定的内存设置的时候才会被注销。
然后具体解释一下这6个策略,大致分为2帮3派,怎么说呢,2帮指代的是allkeys和volatile开头的4个算法,他们算法大致相同,区别在于,allkeys处理的是所有变量,包括设置的永久变量,而volatile是只处理被设定了有效时间的变量,永久的变量不被考虑。
三派指的是lru、random、ttl,这算个算法执行过程都是,当出现内存超出最大值的时候,会触发内存策略,这时候根据设定的模板选取值,从相应范围的变量中取出对应个数的变量,最后lru从这里面选出用的最少的变量删除淘汰,random随机删除或者淘汰一个,ttl删除这几个中有效时间快到的值
要注意,lru和ttl删除的都是从随机选取的nge模板中的一个值,也就是说,lru删除的不一定是变量中使用最少的,而ttl也不是删除有效时间最快到的值
改完配置文件后,脚本是已经不能用了,暂时只能程序员登陆redis数据进行操作,停止数据库使用 shutdown 命令,如果想继续使用脚本需要修改一下脚本(如果为了方便,可以把下面的IP和端口号改成配置文件设置的,PASSWORD那个密码也可以改为设置的密码,如果没开可以就按照下面写的进行修改)
sed -i '/^HOSTIP=/d' /etc/init.d/redis_6379
sed -i '/^REDISPORT=/iHOSTIP=${2-"127.0.0.1"}' /etc/init.d/redis_6379
sed -i '/^REDISPORT=/cREDISPORT=${3-"6379"}' /etc/init.d/redis_6379
sed -i '/^REDISPORT=/aPASSWORD=${4-"password"}' /etc/init.d/redis_6379
sed -i 's/$CLIEXEC -p $REDISPORT shutdown/$CLIEXEC -h $HOSTIP -p $REDISPORT -a $PASSWORD shutdown/' /etc/init.d/redis_6379
LNMP+Redis集群
搭建lnmp集群,分为三步
1. 搭建nginx服务,可以用源码包进行编译安装,也可以到资源中下载rpm包安装
需要修改nginx的配置文件,开启动静分离
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
2. 搭建数据库,这里搭建redis数据库,然后让另外一个服务器作为独立的MySQL服务器
搭建 redis 步骤上面已经阐述,解包、编译、安装、初始化,因为是本机使用,配置文件不用特别修改
3. 安装php连接redis的不要模块信息
3.1 安装依赖包(php-devel不是yum里面的,资源中redis有分享)
yum -y install automake autoconf php php-common
rpm -ivh php-devel-5.4.16-42.el7.x86_64.rpm
3.2 解压编译安装php连接redis数据库的包
tar -xf php-redis-2.2.4.tar.gz
phpize
./configure --with-php-config=/usr/bin/php-config
make && make install
3.3 配置,修改php配置文件 /etc/php.ini ,如果是新建的话,那么就是修改728-730行
extension_dir = "/usr/lib64/php/modules/"
; On windows:
extension = "redis.so"
3.4 启动服务
systemctl restart php-fpm
*. 测试集群连接,在nginx目录下的html目录下创建一个php文件
<?php
$r = new redis();
$r->connect('127.0.0.1',6379);
$r->set('变量名','变量内容');
echo $r->get('变量名');
?>