代码拉取完成,页面将自动刷新
同步操作将从 panglijing/DBA 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
~~~~~~~~~~~~~~~~NoSQL _DAY01
一、相关概念 (需要了解)
1.1 相关的概念
数据库服务软件分为2类:
关系型数据库服务软件 简称 RDBMS
存储数据的特点?
服务软件?MySQL
非关系型数据库服务软件 简称 NoSQL
存储数据的特点?
服务软件?
1.2、redis 软件介绍
Remote Dictionary Server(远程字典服务器)
是一款高性能的(Key/Values)分布式内存数据库
支持数据持久化(定期把内存里数据存储到硬盘)
支持多种数据类型:字符、列表、散列、集合
支持 master-salve 模式数据备份
中文网站www.redis.cn
二、 在 ip地址 192.168.4.51 部署 redis服务,具体操作如下:
[root@host51 ~]# which gcc || yum -y install gcc 安装编译工具gcc
[root@host51 ~]#tar -xf redis-4.0.8.tar.gz 解压源码
[root@host51 ~]#cd redis-4.0.8/ 进入源码目录
[root@host51 ~]#make 编译
[root@host51 ~]#make install 安装
[root@host51 ~]#./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... 初始化配置后 会自动启动redis服务 并设置开机运行
Installation successful!
[root@host51 redis-4.0.8]#
查看服务的端口号
[root@host51 redis-4.0.8]# netstat -utnalp | grep 6379
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 4108/redis-server 1
[root@host51 redis-4.0.8]#
[root@host51 redis-4.0.8]# ps -C redis-server
PID TTY TIME CMD
4108 ? 00:00:00 redis-server
[root@host51 redis-4.0.8]#
停止redis服务
[root@host51 redis-4.0.8]# /etc/init.d/redis_6379 stop
Stopping ...
启动redis服务
[root@host51 redis-4.0.8]# /etc/init.d/redis_6379 start
Stopping ...
连接服务存取数据
说明:默认只能在本机连接redis服务 (只能自己访问自己)
[root@host51 ~]# redis-cli #连接本机的redis服务
127.0.0.1:6379>
127.0.0.1:6379> exit #断开连接
[root@host51 ~]#
[root@host51 ~]# redis-cli 连接服务 存取数据
127.0.0.1:6379> ping #测试连接是否正常
PONG
127.0.0.1:6379> set school tarena #存储数据 set 变量名 值
OK
127.0.0.1:6379> keys * #查看所有变量名
1) "school"
127.0.0.1:6379> get school #查看变量的值 get 变量名
"tarena"
127.0.0.1:6379> exit #断开连接
[root@host51 ~]#
1.2 Redis服务常用管理命令
存储数据 查看数据
删除数据 移动数据
设置数据的存储时间 查看数据类型
清空数据 停止redis服务
127.0.0.1:6379> mset name plj age 80 classs nsd2108
OK
127.0.0.1:6379> keys *
1) "age"
2) "classs"
3) "name"
4) "school"
127.0.0.1:6379> mget name age class
1) "plj"
2) "80"
3) (nil) 说明变量没有定义
127.0.0.1:6379> get classs
"nsd2108"
127.0.0.1:6379>
keys 使用统配符查看变量
* 匹配所有变量名
? 一个字符
127.0.0.1:6379> keys *
1) "age"
2) "classs"
3) "name"
4) "school"
127.0.0.1:6379> keys ???
1) "age"
127.0.0.1:6379> keys a*
1) "age"
127.0.0.1:6379>
127.0.0.1:6379> keys gender
(empty list or set) 说明变量不存储
127.0.0.1:6379> keys name
1) "name"
127.0.0.1:6379>
select 切换库 默认库编号 0-15
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> select 16
(error) ERR DB index is out of range
127.0.0.1:6379>
127.0.0.1:6379> keys *
1) "age"
2) "classs"
3) "name"
4) "school"
127.0.0.1:6379> select 1 切换到 1号库里
OK
127.0.0.1:6379[1]> keys * 查看数据没有数据
(empty list or set)
127.0.0.1:6379[1]>
move 命令 移动变量到其他库里
127.0.0.1:6379> keys *
1) "age"
2) "classs"
3) "name"
4) "school"
127.0.0.1:6379> move age 1
(integer) 1
127.0.0.1:6379> keys *
1) "classs"
2) "name"
3) "school"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
1) "age"
127.0.0.1:6379[1]>
exists 检查变量是否存储 返回值1 变量存储 返回值是0 变量不存在
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> EXISTS name
(integer) 1
127.0.0.1:6379> get name
"plj"
127.0.0.1:6379> set name bob
OK
127.0.0.1:6379> get name
"bob"
127.0.0.1:6379>
EXPIRE 命令设置变量的过期时间 不设置变量永不过期
ttl 检查变量可以在内存里存多久
127.0.0.1:6379> set sex girl
OK
127.0.0.1:6379> ttl sex
(integer) -1 表示永不过期
127.0.0.1:6379> EXPIRE sex 15 设置过期时间15 秒
(integer) 1
127.0.0.1:6379> keys sex
1) "sex"
127.0.0.1:6379> ttl sex
(integer) 8 还剩下8秒时间过期
127.0.0.1:6379> ttl sex
(integer) -2 表示已经过期被删除
127.0.0.1:6379> keys sex
(empty list or set)
127.0.0.1:6379>
type 命令检查变量存储数据的类型
使用set mset命令存储的数据都字符类型。
数据的类型不同 管理的命令也不同
第3天详细讲redis数据类型。
127.0.0.1:6379> set x 99
OK
127.0.0.1:6379> mset y 108
OK
127.0.0.1:6379> type x
string
127.0.0.1:6379> type y
string
127.0.0.1:6379> lpush tea nb wk zzg plj lx
(integer) 5
127.0.0.1:6379> keys *
1) "y"
2) "tea"
3) "name"
4) "school"
5) "x"
6) "classs"
127.0.0.1:6379> get tea #get命令只能获取字符类型变量值
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> type tea 查看变量类型 list 列表类型的数据
list
127.0.0.1:6379> LRANGE tea 0 -1
1) "lx"
2) "plj"
3) "zzg"
4) "wk"
5) "nb"
127.0.0.1:6379>
del 删除内存里的变量
127.0.0.1:6379> keys *
1) "y"
2) "tea"
3) "name"
4) "school"
5) "x"
6) "classs"
127.0.0.1:6379> del tea y school
(integer) 3
127.0.0.1:6379> keys *
1) "name"
2) "x"
3) "classs"
127.0.0.1:6379>
flushdb 删除当前所在库的所有数据
127.0.0.1:6379> keys *
1) "name"
2) "x"
3) "classs"
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> SELECT 1
OK
127.0.0.1:6379[1]> keys *
1) "age"
127.0.0.1:6379[1]>
flushall 删除内存里的所有内存里所有数据 (慎用)
save 把内存了数据马上存储到硬盘(存储到数据库目录下的文件 )
127.0.0.1:6379[1]> mset x 1 y 2 z 3 c 4
OK
127.0.0.1:6379[1]> keys *
1) "y"
2) "x"
3) "c"
4) "z"
127.0.0.1:6379[1]> save
OK
127.0.0.1:6379[1]> exit
[root@host51 ~]# ls /var/lib/redis/6379/
dump.rdb
[root@host51 ~]#
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
shutdown 停止redis 和 执行脚本停止服务效果一样
[root@host51 ~]# redis-cli shutdown
[root@host51 ~]# redis-cli
Could not connect to Redis at 127.0.0.1:6379: Connection refused
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected> exit
[root@host51 ~]# /etc/init.d/redis_6379 start
Starting Redis server...
[root@host51 ~]# redis-cli
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
1) "z"
2) "c"
3) "x"
4) "y"
127.0.0.1:6379[1]>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1.3 配置文件解析 文件里常用配置项说明
通过修改配置项改变redis服务的运行配置,需要重启redis服务才能生效
注意:修改服务使用的ip地址、端口号 、连接密码 三项中的任意一项
都无法再使用脚本停止服务,
解决办法1 使用命令停止服务
解决办法2 修改脚本
案例: 修改主机host51 Redis服务使用的Ip地址192.168.4.51 端口号6351 和连接密码123456
1.3 配置文件解析 文件里常用配置项说明
通过修改配置项改变redis服务的运行配置,需要重启redis服务才能生效
注意:修改服务使用的ip地址、端口号 、连接密码 三项中的任意一项
都无法再使用脚本停止服务,
解决办法1 使用命令停止服务
解决办法2 修改脚本
案例: 修改主机host51 Redis服务使用的 Ip地址192.168.4.51 端口号6351 和连接密码123456
[root@host51 ~]# vim /etc/redis/6379.conf
70 bind 192.168.4.51 地址
93 port 6351 端口
501 requirepass 123456 密码
:wq
[root@host51 ~]# /etc/init.d/redis_6379 stop
Stopping ...
Redis stopped
[root@host51 ~]# /etc/init.d/redis_6379 start
[root@host51 ~]# netstat -utnalp | grep redis-server
tcp 0 0 192.168.4.51:6351 0.0.0.0:* LISTEN 4405/redis-server 1
[root@host51 ~]#
默认连接127.0.0.1 地址 和端口 6379 但当前Redis服务的地址和端口都改变了
[root@host51 ~]# redis-cli
Could not connect to Redis at 127.0.0.1:6379: Connection refused
Could not connect to Redis at 127.0.0.1:6379: Connection refused 连接失败提示
not connected> exit 退出
[root@host51 ~]#
-h 指定ip地址 -p(小写p) 端口号
[root@host51 ~]# redis-cli -h 192.168.4.51 -p 6351
192.168.4.51:6351> ping
(error) NOAUTH Authentication required. 没有输入报错
192.168.4.51:6351>
192.168.4.51:6351> keys *
(error) NOAUTH Authentication required. 报错
192.168.4.51:6351>
192.168.4.51:6351> auth 123456 输入密码
OK
192.168.4.51:6351> ping 可以正常访问
PONG
192.168.4.51:6351> keys *
1) "b"
2) "c"
3) "a"
4) "d"
5) "site"
192.168.4.51:6351> exit
连接时直接指定密码
[root@host51 ~]# redis-cli -h 192.168.4.51 -p 6351 -a 123456
192.168.4.51:6351> ping
PONG
192.168.4.51:6351> keys *
1) "b"
2) "c"
3) "a"
4) "d"
5) "site"
192.168.4.51:6351>
L练习5分钟到 14:36
#使用命令停止服务
[root@host51 ~]# redis-cli -h 192.168.4.51 -p 6351 -a 123456 shutdown
[root@host51 ~]#
[root@host51 ~]# netstat -utnalp | grep redis-server #服务被停止了 查看不到进程了
[root@host51 ~]#
[root@host51 ~]# /etc/init.d/redis_6379 start 启动服务
Starting Redis server...
[root@host51 ~]# netstat -utnalp | grep redis-server 可以查看到进程了
tcp 0 0 192.168.4.51:6351 0.0.0.0:* LISTEN 4464/redis-server 1
[root@host51 ~]#
#修改脚本使其也可以使用脚本停止服务(启动脚本是使用shell语法编写)
vim +43 /etc/init.d/redis_6379
$CLIEXEC -h 192.168.4.51 -p 6351 -a 123456 shutdown
:wq
#执行脚本停止服务
[root@host51 ~]# /etc/init.d/redis_6379 stop
#查看不到进程说明服务被停止了 脚本改成功了
[root@host51 ~]# netstat -utnalp | grep redis-server
[root@host51 ~]#
二、LNP+Redis (把网站的数据存储在redis服务器里)
生产环境下会被网站的热点数据存放在内存存储服务器里,这样的好处是可以加快存取数据的速度,
能够实现网站访问加速
通常网站会把 频繁被访问的数据(热点数据)、数据小的数据 、可再生的数据 存储在内存存储服务器里
2.1 部署网站运行环境LNP环境 统一使用host50做网站服务器
具体配置步骤如下:
1) 安装源码的nginx软件
2) 安装php软件
3) 修改nginx服务的配置文件实现动静分离
4) 启动服务
启动nginx服务 和 php-fpm服务
查看服务对应的端口80 和 9000
5) 测试Nginx服务能否解释PHP代码
yum -y install gcc pcre-devel zlib-devel
tar -xf nginx-1.12.2.tar.gz
cd nginx-1.12.2/
./configure
make
make install
[root@host50 nginx-1.12.2]# ls /usr/local/nginx/
conf html logs sbin
[root@host50 nginx-1.12.2]#
[root@host50 ~]# yum -y install php php-fpm php-devel
[root@host50 ~]# 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;
}
:wq
[root@host50 ~]# /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
[root@host50 ~]#
[root@host50 ~]# systemctl stop httpd 如果有httpd服务的话要停止
[root@host50 ~]# systemctl disable httpd
Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service.
启动nginx服务
[root@host50 ~]# /usr/local/nginx/sbin/nginx
[root@host50 ~]# netstat -utnalp | grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 9853/nginx: master
[root@host50 ~]# systemctl start php-fpm 启动php-fpm服务
[root@host50 ~]# systemctl enable php-fpm
Created symlink from /etc/systemd/system/multi-user.target.wants/php-fpm.service to /usr/lib/systemd/system/php-fpm.service.
[root@host50 ~]# netstat -utnalp | grep 9000 查看端口
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 9863/php-fpm: maste
[root@host50 ~]#
[root@host50 ~]# vim /usr/local/nginx/html/test.php #编写php脚本
<?php
$i=99;
echo $i;
?>
:wq
[root@host50 ~]#
[root@host50 ~]# curl http://localhost/test.php 命令行访问脚本
99
2.2 配置php支持redis
意思就是在在网站服务器编写php 脚本 可以连接redis服务存储数据和查询数据
默认PHP不支持redis (也就是不能连接redis服务)
在网站服务器主机上做如下配置:
1) 安装软件提供连接redis服务的功能模块
2) 让PHP进程在运行时 调用redis模块
3) 查看是否支持redis服务
4) 测试配置
4.1 在网站服务器编写PHP脚本 存储数据 和查询数据
#编写存储数据的脚本
#编写查询数据的脚本
4.2 在客户端访问网站服务器php脚本
4.3 在Redis服务器本机查看内存里的数据
能够看到PHP存储的数据为成功
[root@host50~]#tar -xf redis-cluster-4.3.0.tgz
[root@host50~]#cd redis-4.3.0/
[root@host50 redis-4.3.0]# phpize 创建配置命令configure 和生产PHP配置信息文件/usr/bin/php-config
Configuring for:
PHP Api Version: 20100412
Zend Module Api No: 20100525
Zend Extension Api No: 220100525
[root@host50 redis-4.3.0]# ./configure --with-php-config=/usr/bin/php-config #配置
[root@host50 redis-4.3.0]# make 编译
[root@host50 redis-4.3.0]# make install 安装
Installing shared extensions: /usr/lib64/php/modules/ #提示模块的安装目录
[root@host50 redis-4.3.0]#
[root@host50 redis-4.3.0]# ls /usr/lib64/php/modules/ #查看目录下的模块列表 有redis.so 模块文件即可
curl.so json.so mysql.so pdo.so phar.so sqlite3.so
fileinfo.so mysqli.so pdo_mysql.so pdo_sqlite.so redis.so zip.so
[root@host50 redis-4.3.0]#
[root@host50 redis-4.3.0]# vim /etc/php.ini
728 extension_dir = "/usr/lib64/php/modules/" 模块文件所在的目录
730 extension = "redis.so" 模块名
:wq
[root@host50 redis-4.3.0]# systemctl restart php-fpm
[root@host50 ~]# php -m | grep -i redis #查看支持的模块
redis
[root@host50 ~]#
4) 测试配置(PHP脚本都网站的程序员 运维不需要,这里编写时为了测试部署的环境)
说明: 要检查脚本连接的redis服务器的redis 服务开启了没有
4.1 在网站服务器编写PHP脚本 存储数据 和查询数据
脚本里都要写什么?
1、连接redis服务(要指定Ip 、 端口 、连接密码(如果有密码的话))
2、执行存储数据或查询数据的命令
#编写存储数据的脚本 set.php
[root@host50 ~]# vim /usr/local/nginx/html/set.php
<?php
$redis = new redis(); 定义连接命令
$redis->connect("192.168.4.51",6351); 指定服务器的ip和端口
$redis->auth("123456"); 指定连接密码
$redis->set("redistest","666666"); 存储数据
echo "save ok";
?>
:wq
#编写查询数据的脚本 get.php
[root@host50 ~]# vim /usr/local/nginx/html/get.php
<?php
$redis = new redis(); 定义连接命令
$redis->connect("192.168.4.51",6351); 指定服务器的ip和端口
$redis->auth("123456"); 指定连接密码
echo $redis->get("redistest"); 输出查询结果
?>
:wq
4.2 在客户端访问网站服务器php脚本
[root@host50 ~]# curl http://localhost/set.php #访问存储数据的脚本
save ok
[root@host50 ~]# curl http://localhost/get.php #访问查询数据的脚本
666666
4.3 在Redis服务器本机查看内存里的数据
能够看到PHP存储的数据为成功
[root@host51 ~]# redis-cli -h 192.168.4.51 -p 6351 -a 123456
192.168.4.51:6351> keys redistest
1) "redistest"
192.168.4.51:6351> get redistest
"666666"
192.168.4.51:6351> exit
[root@host51 ~]#
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
思考主机host51 使用内存给网站服务提供存储数据的空间:
时间久了,Redis服务器host51 会产生那些问题?
1 存储空间不够用 (解决办法1 多台服务器一起提供数据存储服务
解决办法2 删除内存里已经存储的数据 腾出空间存储新数据)
问题2-4 可以通过部署Redis集群存储架构解决问题
2 单独故障问题
3 数据的备份问题
4 访问多的时候 1台Redis服务处理不过来
####################################################
Redis服务的内存清除策略(当内存空间不足,删除内存里已经存储的数据的方式)
内存清除策略是软件的开发者写功能程序并定义的名称方便运维调用。根据需要选择
使用那种内存清除策略即可。
我们运维要知道策略名称 和清除数据的方式!!!
试想 有2GU盘 存放喜欢看的小电影
10个小电影 共占用了 2G 下载新小电影没地方存储了 怎么办????
redis服务提供的内存清除策略如下:(在/etc/redis/6379.conf 有说明信息)
1) LRU 删除最近最少使用的,有2种清除方式:
volatile-lru 针对设置了TTL的key
allkeys-lru 针对所有的key
2)LFU 删除使用频率最少的 有2种清除方式:
volatile-lfu 针对设置了TTL的key
allkeys-lfu 针对所有的key
3) RANDOM 随机删除 有2种清除方式:
volatile-random 针对设置了TTL的key
allkeys-random 针对所有的key
4) volatile-ttl 删除快要过期的
5)noeviction 不删除 存储空间不够时 服务直接报错
与内存相关的配置项 vim /etc/redis/6379.conf
maxmemory //最大内存
maxmemory-policy //定义使用策略
maxmemory-samples 20 //选取key模板的个数 (针对lru 和 ttl 、volatile-ttl 策略)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
NoSQL_day02 部署redis 集群架构提供数据存储服务
需要机器如下:
当前host50不动 做客户端
共有7台服务器 51-57
把今天做实验的host51 删除 重新创建虚拟机配置ip地址是192.168.4.51
准备做集群的六redis 服务器 :
在主机51-56 做如下配置
1) 安装Redis软件 初始化配置
2) 停止redis服务
3) 修改服务使用的ip地址是eth0接口的地址 (不需要设置连接密码和修改服务使用的端口号)
4) 启动redis服务
主机host57 做管理集群的管理主机
配置Ip地址 192.168.4.57
只拷贝软件不需要安装 redis-3.2.1.gem 、 redis-4.0.8.tar.gz
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。