代码拉取完成,页面将自动刷新
redis 是nosql中的一个比较流行的非关系型数据库,生产环境中,网站的热点会被存放在redis内存数据库中,很大的提速了
数据的拿取速度,加快访问的速度
安装 从网上下载tar
tar -xf redis-4.0.8.tar.gz 解压源码 解压
cd redis-4.0.8/ 进入源码目录
make 编译
make install 安装
./utils/install_server.sh 初始化配置 这里可以一路回车默认 也可以根据实际情况修改地址
启动redis服务
[root@host51 redis-4.0.8]# /etc/init.d/redis_6379 start
Stopping ...
停止redis服务
[root@host51 redis-4.0.8]# /etc/init.d/redis_6379 stop
Stopping ...
默认情况下只能在本机连接redis 服务
关于redis里面的详细使用方法这里不介绍了
默认的redis 配置文件在 /etc/redis/6379.conf
70 bind 192.168.4.51 地址
93 port 6351 端口
501 requirepass 123456 密码
这三个参数分别指向 地址 端口 和登录的密码
修改文件后 要重启服务
/etc/init.d/redis_6379 stop
/etc/init.d/redis_6379 start
当修改了文件之后 直接redis-cli 就进不去了 因为系统默认的是127.0.0.1;6379 而且没有密码
修改之后要指定
redis-cli -h 192.168.1.30 -p 6379 -a 123 登录
redis-cli -h 192.168.1.30 -p 6379 -a 123 info 查看redis详细信息
当没有输入密码的时候进去之后写入会报错
(error) NOAUTH Authentication required. 没有输入报错
auth 123456 即可
使用命令停止服务
redis-cli -h 192.168.4.51 -p 6351 -a 123456 shutdown
/etc/init.d/redis_6379 stop 这个默认停止也是127.0.0.1 所以当你指定了ip地址 在使用这个就会失效
可以 redis-cli -h 192.168.4.51 -p 6351 -a 123456 shutdown 直接指向停止
也可以进入vim +43 /etc/init.d/redis_6379 这个关于redis命令脚本的文件中修改地址
$CLIEXEC -h 192.168.4.51 -p 6351 -a 123456 shutdown 把127 改成指定的ip
然后就能正常
/etc/init.d/redis_6379 stop 停止了
/etc/init.d/redis_6379 start 启动服务
/etc/init.d/redis_6379 stop
实力1: 部署lnp+redis 架构:
安装nginx 和php 并修改nginx支持动态页面的配置
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
然后 配置php 支持redis 默认php不支持redis
这句话的意思就是在在网站服务器编写php 脚本 可以连接redis服务存储数据和查询数据
所以需要如下的配置即可:
1) 安装软件提供连接redis服务的功能模块
2) 让PHP进程在运行时 调用redis模块
3) 查看是否支持redis服务
4) 测试配置
安装redis
tar -xf redis-cluster-4.3.0.tgz
cd redis-4.3.0/
然后敲phpize 创建配置命令configure 和生产PHP配置信息文件/usr/bin/php-config
./configure --with-php-config=/usr/bin/php-config #配置 加上php模块
make 编译 && make install 安装
Installing shared extensions: /usr/lib64/php/modules/ #提示模块的安装目录
ls /usr/lib64/php/modules/ #查看目录下的模块列表 有redis.so 模块文件即可
vim /etc/php.ini 修改文件
728 extension_dir = "/usr/lib64/php/modules/" 模块文件所在的目录
730 extension = "redis.so" 模块名
systemctl restart php-fpm重启
php -m | grep -i redis #查看支持的模块
redis
如下即安装成功了
测试
#编写存储数据的脚本 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
然后登录redis keys redistest 查看 是否成功
思考:时间久了redis内存满了怎么办 加大内存 或者 删除以前没有用的数据?
一般我们可以搭建集群解决问题
与内存相关的配置项 vim /etc/redis/6379.conf
maxmemory //最大内存
maxmemory-policy //定义使用策略
maxmemory-samples 20 //选取key模板的个数 (针对lru 和 ttl 、volatile-ttl 策略)
实例2 :
搭建常见的redis-cluster集群: 一般为6台集群一台管理主机 也可以把管理主机放在其中一台
安装redis
查看配置文件中需要修改的行
sed -n '70p;93p;815p;823p;829p' /etc/redis/6379.conf
bind 192.168.4.51
port 6351
cluster-enabled yes #启用集群功能
cluster-config-file nodes-6379.conf 保存集群信息的配置文件
cluster-node-timeout 5000 集群中主机的连接超时时间
安装6太的redis 分别对应 修改上面的几行配置信息 ip 端口 开启集群功能等
在管理主机上操作;
第一步:准备ruby脚本的运行环境
第二步:创建脚本
第三步:查看脚本帮助信息
yum -y install rubygems ruby
gem install redis-3.2.1.gem
mkdir /root/bin
tar -xf redis-4.0.8.tar.gz
cp redis-4.0.8/src/redis-trib.rb /root/bin/
chmod +x /root/bin/redis-trib.rb 设置执行权限
redis-trib.rb help
1.3 创建集群
#在管理主机mgm57 执行创建集群的命令
创建集群的命令格式 [root@mgm57 ~]# redis-trib.rb create --replicas 数字 ip地址:端口 ip地址:端口 ip地址:端口 ....
说明,创建集群时,会把前3台服务器 配置为主服务器,剩下的其他主机全做从服务器
--replicas 从服务器的台数(指定每个主服务器有几台从服务器)
[root@mgm57 ~]# redis-trib.rb create --replicas 1 192.168.4.51:6379 192.168.4.52:6379 192.168.4.53:6379
192.168.4.54:6379 192.168.4.55:6379 192.168.4.56:6379
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.4.51:6379
192.168.4.52:6379
192.168.4.53:6379
Adding replica 192.168.4.55:6379 to 192.168.4.51:6379
Adding replica 192.168.4.56:6379 to 192.168.4.52:6379
Adding replica 192.168.4.54:6379 to 192.168.4.53:6379
当有6台的时候默认是三主三从
[OK] All 16384 slots covered. 创建成功的提示
当集群创建失败的时候; 可能是物理机的内存不足
或者在每一台redis服务器上执行清空cluster reset
#查看集群统计信息
redis-trib.rb info 192.168.4.56:6379 后面跟着那一台服务器的ip地址都可以
#查看集群详细信息
redis-trib.rb check 192.168.4.51:6379
2.2 集群存储数据的工作原理 (!!!重点难点!!!)
Redis集群是如何实现数据的分布式存储的?
存储数据和查询数据时 调用集群算法 集群算法会计算出1个数字, 数字
在哪个主服务占用的范围内 ,就连接对应的主服务器存储数据或查询数据。
就是集群中会有一个数字范围就是后面的槽,当储存的时候会计算,当数字在那个范围内 就储存在那一台redis主机
,那么当集群需要增加2台新的机器的时候怎么办呢
3.1 向集群里添加新服务器
说明:什么情况下需要向集群里添加新主机(添加master角色服务器)
扩大内存空间(添加master角色服务器)。
为了保证服务的可靠性(给主服务器添加多个从服务器)
redis-trib.rb add-node 新主机Ip:端口 集群中已有主机的ip:端口
redis-trib.rb add-node 192.168.4.58:6379 192.168.4.51:6379
[OK] New node added correctly. 添加成功的提示
#新添加的master角色主机没有hash slots
[root@mgm57 ~]# redis-trib.rb info 192.168.4.51:6379
192.168.4.51:6379 (0eb3b7aa...) -> 2 keys | 5461 slots | 1 slaves.
192.168.4.53:6379 (f2c1bdb7...) -> 1 keys | 5461 slots | 1 slaves.
192.168.4.52:6379 (a9cb8ccd...) -> 3 keys | 5462 slots | 1 slaves.
192.168.4.58:6379 (87cc1c12...) -> 0 keys | 0 slots | 0 slaves. 零个hash slots
所以这样即使加入了 没有slots槽 也存不了数据,一要把槽从新分布下
这个数字是一定的假如是255 不管你们有几个机器都是255 平分
redis-trib.rb reshard 集群中已有主机的ip:端口
redis-trib.rb reshard 192.168.4.56:6379
第1个问题 移除多少个hast slots
How many slots do you want to move (from 1 to 16384)? 4096
第2个问题 把4096个槽给哪台主数据库服务器 (host58主机的id)
What is the receiving node ID?87cc1c128166e08a16cc294758611453bbc71437 这个是新添加的主机id
第3个问题 提供4096个槽 主机的id (all 表示当前所有主服务器一起提供4096个槽给host58)
Source node #1:all 所有主机都提供
第4个问题 确认前3步的配置 yes 同意 no 退出
Do you want to proceed with the proposed reshard plan (yes/no)? yes
然后就平局分配了
redis-trib.rb info 192.168.4.56:6379
192.168.4.53:6379 (f2c1bdb7...) -> 1 keys | 4096 slots | 1 slaves.
192.168.4.51:6379 (0eb3b7aa...) -> 1 keys | 4096 slots | 1 slaves.
192.168.4.52:6379 (a9cb8ccd...) -> 2 keys | 4096 slots | 1 slaves.
192.168.4.58:6379 (87cc1c12...) -> 2 keys | 4096 slots | 0 slaves.
2)添加slave角色的服务器
说明:从角色服务器的数据是master服务器同步过来的数据
所以slave角色的服务器不需要分配hash slots
只要把主机添加到集群了做slave服务器就可以了。
redis-trib.rb add-node --slave 新主机Ip:端口 集群中已有主机的ip:端口
!!!!会自动做从服务器个数最少的 master服务器的从服务器。!!!
redis-trib.rb add-node --slave 192.168.4.59:6379 192.168.4.56:6379
redis-trib.rb info 192.168.4.56:6379 查看信息 已经有了从服务器
从服务器 不需要分配槽 他是默认同步主服务器的数据
移除服务器的时候 ,要首先移除从服务器
redis-trib.rb del-node 集群中任意主机的Ip:端口 被移除主机的id
说明:slave角色的主机的没有hash slots 直接移除即可
主机被移除集群后redis服务会自动停止
redis-trib.rb del-node 192.168.4.56:6379 d50aa7c1acebe69af0834f1838c8b17b2348472e
redis-trib.rb info 192.168.4.56:6379
192.168.4.53:6379 (f2c1bdb7...) -> 1 keys | 4096 slots | 1 slaves.
192.168.4.51:6379 (0eb3b7aa...) -> 1 keys | 4096 slots | 1 slaves.
192.168.4.52:6379 (a9cb8ccd...) -> 2 keys | 4096 slots | 1 slaves.
192.168.4.58:6379 (87cc1c12...) -> 2 keys | 4096 slots | 0 slaves. 零台从服务器
移除master角色的主机
说明:master角色的服务器会占用hash slots 要先释放hash slots 再执行移除主机的命令
第一步:释放 hash slots (再次执行reshard命令)
第二步:移除主机 (执行删除主机的命令)
redis-trib.rb reshard 192.168.4.56:6379 重新分配槽
第1个问题:释放hash slots 的个数
How many slots do you want to move (from 1 to 16384)? 4096 (host58主机占用hash slots 的个数)
第2个问题:接收4096的个hash slots的主数据库服务器的ID (随便给那个主服务器都可以)
What is the receiving node ID?0eb3b7aa0493a19189cba35b0c658202cc20884b (host51主机的id ,就是把释放的4096个hash slots给主数据库服务器host51)
第3个问题:从那台主服务器移除4096个hash slots
Source node #1:87cc1c128166e08a16cc294758611453bbc71437 (host58主机的id)
Source node #2:done 结束指定
第4个问题:确认配置 yes同意 no 退出
Do you want to proceed with the proposed reshard plan (yes/no)? yes 同意
redis-trib.rb del-node 192.168.4.56:6379 87cc1c128166e08a16cc294758611453bbc71437
然后移除主就好了
平均分配hash slots
[root@mgm57 ~]# redis-trib.rb rebalance 192.168.4.56:6379 这个命令可以直接平均分配槽
2) 把移除的主机再次添加到集群里的步骤
第一步: 启动Redis服务并清除前世记忆(在Redis服务器本机操作)
第二步: 清空内存里的数据(在Redis服务器本机操作)
第三步: 在管理主机执行执行添加命令(在管理主机执行)
第四步: 查看是否添加成功(在管理主机执行)
把剔除的主机在加入集群要清楚前世的记忆
cluster reset
OK
然后再加入
redis-trib.rb add-node 192.168.4.58:6379 192.168.4.51:6351 把58 在加入集群 重新分槽
把移除的59 主机当作53的从 让53 有2个从服务器
redis-trib.rb add-node --slave --master-id d9c9ef29c07ad740a05fa7aaa4d96ce25fa089b5 192.168.4.59:6379 192.168.4.51:6351
3)把集群中的主机恢复为独立的数据库服务器(host51~host56)
在数据库服务器本机执行如下操作
#停止redis服务
#注释掉配置文件中的集群功能
#清空数据库目录
#启动服务
#连接服务查看不到集群信息 也没有数据
redis-cli -h 192.168.4.51 shutdown 关闭服务
vim /etc/redis/6379.conf
#cluster-enabled yes 关闭集群功能
#cluster-config-file nodes-6379.conf
#cluster-node-timeout 5000
rm -rf /var/lib/redis/6379/* 删除集群产生的数据
etc/init.d/redis_6379 start 重启服务即可
redis 的主从复制: 一主一从和一主多从
redis 主从复制的原理:
从服务器首次做的是全量同步,且同步的数据会覆盖本机的数据
第一步: slave 向master 发送sync请求
第二步: master 启动后台存盘进程,并收集所有修改的数据命令
第三步:master 完成后台存盘后,传送整个数据文件到slave
第四步:slave 接受数据文件后 加载到内存中完成首次完全同步,后续有新数据产生的时候,master继续收集数据修改命令依次传给slave 完成同步
info replication 查看复制主从信息
slaveof 主服务器 端口号 指定主服务器ip地址和端口号
slaveof no one 解除主从同步
想要永久有效 修改配置文件
vi /etc/redis/6379.conf
slaveof 主服务器ip 端口
说明每一台redis 运行后默认的角色都是master 所以一个做主机的服务器 不需要配置任何配置
主从服务器中的从服务器只有读的功能,客户端连接对数据仅有查询的功能
一主多从 就是多加一个从服务器到上面
主从从结构:
就是 三台 一台是主 第二台是从 第三台是第二台的从
直接在第三台的基础上配置第二台的从服务器
slaveof iP2 端口 即可
哨兵服务:
哨兵服务最少需要三台,监视主从复制中的主服务器,发现主服务器无法连接后,
会投票选举然后把相对应的从升级为主数据库服务器,继续监测新的主服务器,坏掉的服务器
恢复后会自动做当前主服务器的从主机
说明: 1)可以使用一主一从或 一主多从 或 主从从 + 哨兵服务 做服务的高可用 和 数据自动备份
2)如果主从结构中的redis服务设置连接密码的话必须全每台数据库都要设置密码且密码要一样,
3)宕机的服务器 启动服务后,要人为指定主服务器的连接密码
步骤一:配置哨兵服务(192.168.4.57)
具体操作步骤:
1)安装源码软件redis (无需做初始化配置,如果做了初始化把redis服务停止即可)
2)创建并编辑主配置文件 (说明源码包里有哨兵服务配置文件的模板sentinel.conf)
1) 安装源码软件redis (无需做初始化配置,如果做了初始化把redis服务停止即可)
哨兵服务 可以 三台主从从 然后哨兵服务装在一台redis机器上面 由于哨兵服务本身的哨兵也是一个进程,为了防止单点故障哨兵服务
这个进程坏了,我们可以使用多哨兵的服务模式,当一个哨兵服务挂掉,还有其他哨兵咋监测,也可以把哨兵服务装在其他服务器上
步骤一:配置哨兵服务(192.168.4.57)
具体操作步骤:
1)安装源码软件redis (无需做初始化配置,如果做了初始化把redis服务停止即可)
2)创建并编辑主配置文件 (说明源码包里有哨兵服务配置文件的模板sentinel.conf)
1) 安装源码软件redis (无需做初始化配置,如果做了初始化把redis服务停止即可)
[root@redis57 ~ ]# yum -y install gcc
[root@redis57 ~ ]# tar -zxf redis-4.0.8.tar.gz
[root@redis57 redis]# cd redis-4.0.8/
[root@redis1 redis-4.0.8]# make
[root@redis1 redis-4.0.8]# make install
2)创建并编辑主配置文件
#说明源码包里有哨兵服务配置文件的模板sentinel.conf
[root@host57 ~]# vim /etc/sentinel.conf
bind 192.168.4.57
sentinel monitor redis_server 192.168.4.51 6379 1
sentinel auth-pass redis_server 123456 #如果主服务器没有连接密码此配置项可用省略
:wq
3)启动哨兵服务 (会占用当前终端显示启动信息)
[root@mgm57 redis-4.0.8]# nohup redis-sentinel /etc/sentinel.conf &
[1] 5701
[root@mgm57 redis-4.0.8]# nohup: 忽略输入并把输出追加到"nohup.out" 回车即可
[root@mgm57 redis-4.0.8]# jobs 查看当前终端后台进程
[1]+ 运行中 nohup redis-sentinel /etc/sentinel.conf &
[root@mgm57 redis-4.0.8]#
先设置成主从从 51 主 52 从 53 从
57 ip 可以先做哨兵服务器监视主机
也可以在51 52 53 三台中的一台做哨兵服务器监视主机 都行
持久化:redis 可以永久的保存数据,实现的两种方法是aof文件和rdb文件
1) RDB文件
指定就是数据库目录下的 dump.rdb 文件
redis运行服务后,会根据配置文件的设置的存盘频率 把内存里的数据复制到数据库目录下的dump.rdb文件
2)AOF文件
redis服务AOF文件与mysql服务的binlog日志文件的功能相同
是一个文件,记录连接redis服务后执行的写操作命令并且是以追加的方式记录写操作命令
默认没有开启,使用需要人为启用。
2.4、RDB文件的使用
2.4.1、查看 redis服务存储数据到硬盘的存盘频率
vim /etc/redis/6379.conf
save 秒 变量的个数
219:save 900 1
220:save 300 10
221:save 60 10000
2.4.4 RDB方式的优/缺点
优点:
高性能的持久化实现 —— 创建一个子进程来执行持久化,先将数据写入临时文件,持久化过程结束后,再用这个临时文件替换上次持久化好的文件;
过程中主进程不做任何IO操作比较适合大规模数据恢复,且对数据完整性要求不是非常高的场合
缺点:意外宕机时,丢失最后一次持久化的所有数据
2.5 AOF文件的使用
2.5.1 启用AOF文件
1、通过修改配置文件启用(修改文件需要重启redis服务才能生效,所以时适合线下服务器)
注意:通过配置文件启用AOF文件 服务器原有的数据会被删除
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。