一、应用场景及性能(在使用Redis之前我们要思考这框架能帮我们解决什么现实问题)
1、缓存: 最常用的一种使用Redis的情景是会话缓存(session cache)。用Redis缓存会话比其他存储(如Memcached)的优势在于:Redis提供持久化。
如: 图形验证码、短信、邮箱验证码、注册链接的有效期存储验证及有效期设置、第三方接口访问Token有效期设置、登录会话有效期
2、排行榜(ZADD key score1 member1 ,ZREVRANGE key start stop WITHSCORES ,ZREMRANGEBYRANK key start stop),如电商商城产品访问的排行榜。
3、计数器(incr key value),统计用户访问登录次数,用户注册量统计,某新闻、产品浏览次数,访问流量统计是非常的实用。
4、队列: Reids在内存存储引擎领域的一大优点是提供 list 和 set 操作,这使得Redis能作为一个很好的消息队列平台来使用。
5、性能:
Redis能读的速度是110000次/s,写的速度是81000次/s 。是属于单线程安全的。
6、特点:
6.1、数据类型,较为丰富,常用的支持String 、hash、list、set,而且支持缓存数据的有效期设置
6.2、支持数据持久化,定期将内存中数据刷新到磁盘中
6.3、主从节点同步
6.4、可使用缓存实现队列传输
二、Redis实际集群部署操作步骤
1、下载部署包redis-3.0.7.tar.gz
2、将下载的包放入并解压到Linux系统指定目录中,在这里我以/home/目录为例,准备三台服务器分别为
192.168.113.138、192.168.113.134、192.168.113.131 下面步骤就不区分是在哪台服务器进行操作了,步骤都是一样的,先搭建一个单机版的示例,后面再搭建一个集群环境,遵循一步一步来原则
--2.1、解压
#tar -zxvf redis-3.0.7.tar.gz
--2.2、执行make 对Redis解压后文件进行编译
#cd redis-3.0.7
#make
--2.3、进入src 目录 make install 进行Redis安装
#cd /home/redis/redis-3.0.7/src
#make install
--2.4、 修改配置文件redis.conf daemonize属性改为yes (表明需要在后台运行) ,否则关闭命令窗口,Redis服务也会随着关停
#vim /home/redis/redis-3.0.7/redis.conf
--2.5、将redis-trib.rb 复制到/usr/local/bin目录 ,这样进入redis shell 窗口就方便些,不需要进入到/redis-3.0.7/目录中执行命令才可以进入
#cd /home/redis/redis-3.0.7/src
#cp redis-trib.rb /usr/local/bin
--2.6、Redis服务启动关停命令
#cd /home/redis/redis-3.0.7/
-- 启动
#redis-server redis.conf
-- 关停
#redis-cli shutdown
--下面就是查看是否启动OK了:
启动、关停服务都正常
其他常用命令,详情请到中文Redis官方网进行查看
3、单机版搭建比较简单可以快速完成,现在开始搭建Redis集群模式(如果集群中任意Master节点挂掉,且当前Master没有slave.集群就进入fail状态,表示redis集群挂掉了,所以部署的时候一定要给Master节点配置Salve节点),Redis支持分布式集群模式是从3.0版本开始支持的,之前版本就不支持分布式集群(只少准备三台服务器,主从Master、Savle节点不要部署在同一台服务器上,而是要分开部署)
--3.1 在192.168.113.138 服务器 修改redis.conf 配置文件,配置支持分布式集群
#vim /home/redis/redis-3.0.7/redis.conf
--重要的配置如下
port 6379 #redis访问端口默认是6379
cluster-enabled yes # 允许redis支持集群模式
cluster-config-file nodes.conf # 节点配置文件
cluster-node-timeout 15000 # 节点超时毫秒
appendonly yes
bind 192.168.113.138 #绑定本机iP
--3.2 创建Redis多个访问端口
#mkdir -p /usr/local/cluster-test
#cd /usr/local/cluster-test/
#mkdir 7000
#mkdir 7001
--将redis.conf 分别拷贝到这6个文件夹中,并修改成对应的端口号
#cp /home/redis/redis-3.0.7/redis.conf /usr/local/cluster-test/7000
#cp /home/redis/redis-3.0.7/redis.conf /usr/local/cluster-test/7001
#cp /home/redis/redis-3.0.7/redis.conf /usr/local/cluster-test/7011
--将redis.conf中的6379 替换成替换成7000、7001、7011
#sed -i "s/6379/7000/g" /usr/local/cluster-test/7000/redis.conf
#sed -i "s/6379/7001/g" /usr/local/cluster-test/7001/redis.conf
#sed -i "s/6379/7011/g" /usr/local/cluster-test/7011/redis.conf
--启动Redis 7000、7001、7011访问实列
#cd /usr/local/cluster-test/7000/
#redis-server redis.conf
#cd /usr/local/cluster-test/7001/
#redis-server redis.conf
#cd /usr/local/cluster-test/7011/
#redis-server redis.conf
--3.3 接下来要安装ruby(为什么要安装ruby呢?
搭建Redis集群需要使用到官方提供的ruby脚本。
)
--这里介绍在线安装模式
#yum install ruby ruby-devel rubygems rpm-build
--安装ruby和redis的连接组件
#gem install redis
--3.4、192.168.113.134、192.168.113.131也按照192.168.113.138上安装Redis的步骤进行安装,至于Redis访问端口可以改成不一样,并且启动Redis访问实列
---3.5、接下来就是将所有启动的Redis实列给集群起来,执行如下命令
#redis-trib.rb create --replicas 1 192.168.113.138:7000 192.168.113.138:7001 192.168.113.138:7011 192.168.113.134:7006 192.168.113.134:7007 192.168.113.131:7008 192.168.113.131:7009 192.168.113.131:7010
--安装成功后会出现如下信息
--3.6 如果启动成功后想看看集群状态消息,会出现如上信息,可以通过如下命令
#redis-trib.rb check 192.168.113.138:7000
--3.7 如果想知道存取的key是存在哪台服务器上,可以通过如下命令打开shell 客户端:
#redis-cli -c -h 192.168.113.138 -p 7000
上面例子以及实现了分布式集群获取数据例子,我从192.168.113.138:7000Redis实列获取到集群中的 192.168.113.131:7008服务器上的缓存数据
4、Redis分布式集群节点新增、删除操作
--4.1、新增一个为7012实列的Master节点到集群中
#cd /usr/local/cluster-test/7012/
#redis-server redis.conf #修改端口port为7012
#redis-trib.rb add-node 192.168.113.138:7012 192.168.113.138:7000 #代表将192.168.113.138:7012节点加入到192.168.113.138:7000所在的Redis集群中
然后用输入检查集群状态消息的命令查看是否增加192.168.113.138:7012 为Master节点成功
#redis-trib.rb check 192.168.113.138:7000
结果是成功,但是你会发现192.168.113.138:7012并咩有分配哈希槽值(总共有16384个值),如果没有分配就不会有数据存储在此节点上,因此需要重新分配redis集群中的哈希槽值范围
#redis-trib.rb reshard 192.168.113.138:7000
?要求输入每一个Master节点分配多少哈希槽值,我们这里已经有5个Master节点因此 要输入16384/5=3276
输入3276后按回车键
What is the receiving node ID? all
*** The specified node is not known or not a master, please retry.
What is the receiving node ID?5274e383f57df1d881e21d2b850712defa7143b1 #获取7012对应的ID值 M: 5274e383f57df1d881e21d2b850712defa7143b1 192.168.113.138:7012
-- 后面的就按照界面提示操作就好,Redis进群哈希槽分配好之后输入如下命令查看是否分配好
#redis-trib.rb reshard 192.168.113.138:7000
-- 4.2、上面已经将新增的Master节点192.168.113.138:7012 节点成功的加入到集群中,现在需要给当前Master节点192.168.113.138:7012配置一个Salves节点,为演示主从节点部署在不同服务器,这次新增192.168.113.134:7013Salve节点,进入192.168.113.134服务器
#cd /usr/local/cluster-test
#mkdir 7013
#cp 7007/redis.conf /usr/local/cluster-test/7013
#sed -i "s/7007/7013/g" /usr/local/cluster-test/7013/redis.conf
----master-id表示指定的主节点192.168.113.138:7012 node id。
#redis-trib.rb add-node --slave --master-id 5274e383f57df1d881e21d2b850712defa7143b1 192.168.113.134:7013 192.168.113.138:7012
#redis-trib.rb check 192.168.113.138:7000
-- 4.3 删除Master、Salve节点(如果某台Redis节点所在服务器要进行调整,我们就需要将当前节点上的数据给迁移出来分配到当前集群中的其他节点上面,然后当前节点移除集群中)
#redis-trib.rb reshard 192.168.113.138:7012
What is the receiving node ID? #提示我们,需要移动到哪个id上,那就填192.168.113.131:7010的吧:
Source node #1:5274e383f57df1d881e21d2b850712defa7143b1 #从哪个节点移除数据这里是192.168.113.138:7012
Source node #2:done #done表示完成
Do you want to proceed with the proposed reshard plan (yes/no)? yes
#redis-trib.rb del-node 192.168.113.138:7012 5274e383f57df1d881e21d2b850712defa7143b1
这样就就将192.168.113.138:7012上的数据给移除出去,并将当前节点给移除当前集群中。
三、常见问题
1、如果出现
[ERR] Node 192.168.113.133:7000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
就将指定的节点中将 appendonly.aof dump.rdb nodes.conf 文件删除就好