以4.0.1 为例
基本安装:
可以在linux下运行如下命令进行安装
$ tar -zxvf redis-4.0.1-linux.tar.gz
$ cd redis-4.0.1
$ make
make完后redis-4.0.1/src目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli
下面启动redis服务.
$./redis-server &
注意这种方式启动redis 使用的是默认配置。也可以通过启动参数告诉redis使用指定配置文件使用下面命令启动.
$./redis-server ../redis.conf &
redis.conf是一个默认的配置文件。我们可以根据需要使用自己的配置文件。
设置密码参数为:requirepas 密码
设置允许访问bind 127.0.0.1 {具体IP},注销掉则允许所有IP访问
运行模式 protected-mode no
在redis3.2之后,redis增加了protected-mode,在这个模式下,默认下其他地址访问redis会报错,即使注释掉了bind 127.0.0.1,再访问redis时候还是报错
修改办法:protected-mode no
同时设置redis密码,使用密码登录
启动redis服务进程后,就可以使用测试客户端程序redis-cli和redis服务交互了.
比如
$ ./redis-cli [-h 127.0.0.1 -p 6379]
redis> set foo bar
OK
redis> get foo
"bar"
这里演示了get和set命令操作简单类型value的例子。foo是key ,bar是个string类型的value
如果 redis.conf中设置了密码,则客户端需要指定密码才能连接成功。
$ ./redis-cli [-h 127.0.0.1 -p 6379]
$ auth 密码
到此,单节点的 Redisserver 已经安装完毕,以下进入配置和安装集群的过程。
创建集群中的6个节点
集群配置文件
集群相关的配置文件主要修改 redis.conf 中的一下几个地方,因为都部署在一个服务器上,每个节点的端口不同。
| [root@centos7-1 redis-3.0.6]$ vi redis.conf #修改以下地方 port 7000 cluster-enabled yes cluster-config-file nodes-7000.conf cluster-node-timeout 5000 appendonly yes |
每个节点的配置文件
创建6个文件夹,分别表示一个 redis 节点,文件夹使用 redis 节点的端口号命名,文件里存放每个节点的配置文件。
| [root@centos7-1 redis-3.0.6]# mkdir /usr/local/redis-cluster [root@centos7-1 redis-3.0.6]# cd /usr/local/redis-cluster [root@centos7-1 redis-cluster]# mkdir 7000 7001 7002 7003 7004 7005 |
拷贝 redis.conf 拷贝到6个文件夹中
| [root@centos7-1 redis-cluster]# cp ~/redis-3.0.6/redis.conf 7000 [root@centos7-1 redis-cluster]# cp ~/redis-3.0.6/redis.conf 7001 [root@centos7-1 redis-cluster]# cp ~/redis-3.0.6/redis.conf 7002 [root@centos7-1 redis-cluster]# cp ~/redis-3.0.6/redis.conf 7003 [root@centos7-1 redis-cluster]# cp ~/redis-3.0.6/redis.conf 7004 [root@centos7-1 redis-cluster]# cp ~/redis-3.0.6/redis.conf 7005 |
并修改每个配置中的内容为各自节点的端口,注意 port 和 cluster-config-file 的值必须唯一。
分别启动每个节点
| [root@centos7-1 ~]# redis-server /usr/local/redis-cluster/7000/redis.conf [root@centos7-1 ~]# redis-server /usr/local/redis-cluster/7001/redis.conf [root@centos7-1 ~]# redis-server /usr/local/redis-cluster/7002/redis.conf [root@centos7-1 ~]# redis-server /usr/local/redis-cluster/7003/redis.conf [root@centos7-1 ~]# redis-server /usr/local/redis-cluster/7004/redis.conf [root@centos7-1 ~]# redis-server /usr/local/redis-cluster/7005/redis.conf |
启动完成后查看进程
| [root@centos7-1 ~]# ps -ef | grep redis root 4704 2177 0 12:12 pts/0 00:00:07 redis-server *:7000 [cluster] root 4707 4599 0 12:12 pts/1 00:00:07 redis-server *:7001 [cluster] root 4710 4638 0 12:12 pts/2 00:00:07 redis-server *:7002 [cluster] root 4752 4717 0 12:12 pts/3 00:00:07 redis-server *:7003 [cluster] root 4788 4759 0 12:12 pts/4 00:00:07 redis-server *:7004 [cluster] root 4824 4795 0 12:13 pts/5 00:00:07 redis-server *:7005 [cluster] root 9018 8984 0 14:08 pts/6 00:00:00 grep --color=auto redis |
建立 Redis 集群
上面的步骤分别创建了6个节点,并已经启动,这里要把这6个节点加入到一个集群里面。redis 已经为我们提供了集群操作的脚本 redis-trib.rb , 操作起来很简单,继续。
安装 ruby
由于集群操作需要用到 ruby 脚本 redis-trib.rb , 所以要安装 ruby 和 rubygems
| [root@centos7-1 ~]# yum -y install ruby rubygems [root@centos7-1 ~]# gem install redis --version 3.0.6 Fetching: redis-3.0.6.gem (100%) Successfully installed redis-3.0.6 Parsing documentation for redis-3.0.6 Installing ri documentation for redis-3.0.6 1 gem installed |
redis-trib.rb 是一个 ruby 脚本工具,用来建立和管理 redis 集群,因为使用比较频繁,所以拷贝脚本 redis-trib.rb 到 /usr/local/bin/
[root@centos7-1 redis-3.0.6]$ cp src/redis-trib.rb /usr/local/bin/ |
创建集群
[root@centos7-1 ~]# redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 >>> Creating cluster >>> Performing hash slots allocation on 6 nodes... Using 3 masters: 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 Adding replica 127.0.0.1:7003 to 127.0.0.1:7000 Adding replica 127.0.0.1:7004 to 127.0.0.1:7001 Adding replica 127.0.0.1:7005 to 127.0.0.1:7002 M: d900d3667196121f95bdbd68ca2317926a6950bc 127.0.0.1:7000 slots:0-5460 (5461 slots) master M: b662853288cc89a3b78f70120d57c0a34f6a91d5 127.0.0.1:7001 slots:5461-10922 (5462 slots) master M: 6dc5ee101c2432ec4c1d934d54a6a3565116bbff 127.0.0.1:7002 slots:10923-16383 (5461 slots) master S: d18e50ac6aff2f612fac43da74a79288aa574c87 127.0.0.1:7003 replicates d900d3667196121f95bdbd68ca2317926a6950bc S: 85f6455e14d03ebaefeca3dbe3c78c92f2f76ead 127.0.0.1:7004 replicates b662853288cc89a3b78f70120d57c0a34f6a91d5 S: 89d792acda7f2c99c95b0d3947572647cf9edc67 127.0.0.1:7005 replicates 6dc5ee101c2432ec4c1d934d54a6a3565116bbff Can I set the above configuration? (type 'yes' to accept): yes >>> Nodes configuration updated >>> Assign a different config epoch to each node >>> Sending CLUSTER MEET messages to join the cluster Waiting for the cluster to join.. >>> Performing Cluster Check (using node 127.0.0.1:7000) M: d900d3667196121f95bdbd68ca2317926a6950bc 127.0.0.1:7000 slots:0-5460 (5461 slots) master M: b662853288cc89a3b78f70120d57c0a34f6a91d5 127.0.0.1:7001 slots:5461-10922 (5462 slots) master M: 6dc5ee101c2432ec4c1d934d54a6a3565116bbff 127.0.0.1:7002 slots:10923-16383 (5461 slots) master M: d18e50ac6aff2f612fac43da74a79288aa574c87 127.0.0.1:7003 slots: (0 slots) master replicates d900d3667196121f95bdbd68ca2317926a6950bc M: 85f6455e14d03ebaefeca3dbe3c78c92f2f76ead 127.0.0.1:7004 slots: (0 slots) master replicates b662853288cc89a3b78f70120d57c0a34f6a91d5 M: 89d792acda7f2c99c95b0d3947572647cf9edc67 127.0.0.1:7005 slots: (0 slots) master replicates 6dc5ee101c2432ec4c1d934d54a6a3565116bbff [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. |
以上 create 命令创建了集群,选项 –replicas 1 表示每个 Master 都需要一个 Slave。所以结果是集群中创建了3个 Master 节点和 3个 Slave 节点。
上面信息中 M 表示 Master 节点, S 表示 Slave 节点。
由此可以看出三组 Master 和 Slave 关系如下:
M: d900d3667196121f95bdbd68ca2317926a6950bc -> S: d18e50ac6aff2f612fac43da74a79288aa574c87 M: 6dc5ee101c2432ec4c1d934d54a6a3565116bbff -> S: 89d792acda7f2c99c95b0d3947572647cf9edc67 M: b662853288cc89a3b78f70120d57c0a34f6a91d5 -> S: 85f6455e14d03ebaefeca3dbe3c78c92f2f76ead |
检测集群的状态
[root@centos7-1 ~]# redis-trib.rb check 127.0.0.1:7000 >>> Performing Cluster Check (using node 127.0.0.1:7000) M: d900d3667196121f95bdbd68ca2317926a6950bc 127.0.0.1:7000 slots:0-5460 (5461 slots) master 1 additional replica(s) M: 6dc5ee101c2432ec4c1d934d54a6a3565116bbff 127.0.0.1:7002 slots:10923-16383 (5461 slots) master 1 additional replica(s) S: 89d792acda7f2c99c95b0d3947572647cf9edc67 127.0.0.1:7005 slots: (0 slots) slave replicates 6dc5ee101c2432ec4c1d934d54a6a3565116bbff S: d18e50ac6aff2f612fac43da74a79288aa574c87 127.0.0.1:7003 slots: (0 slots) slave replicates d900d3667196121f95bdbd68ca2317926a6950bc S: 85f6455e14d03ebaefeca3dbe3c78c92f2f76ead 127.0.0.1:7004 slots: (0 slots) slave replicates b662853288cc89a3b78f70120d57c0a34f6a91d5 M: b662853288cc89a3b78f70120d57c0a34f6a91d5 127.0.0.1:7001 slots:5461-10922 (5462 slots) master 1 additional replica(s) [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. |
测试集群
利用 redis-cli-c -p 端口号连接集群
[root@centos7-1 ~]# redis-cli -c -p 7000 127.0.0.1:7000> get hello (nil) 127.0.0.1:7000> set hello "hello world" OK 127.0.0.1:7000> get hello "hello world" 127.0.0.1:7000> get name -> Redirected to slot [5798] located at 127.0.0.1:7001 (nil) 127.0.0.1:7001> set name "redis server" OK 127.0.0.1:7001> get name "redis server" |
项目中使用
在需要使用redis的bean类中自动注入RedisHolder
@Autowired
private RedisHolder redisHolder;
即可通过jedisTemplate操作Redis数据库。