Redis的安裝
下載redis
官網(wǎng)地址:http://redis.io/
下載地址:http://download.redis.io/releases/redis-4.0.11.tar.gz
準(zhǔn)備C++環(huán)境
安裝redis需要c語(yǔ)言的編譯環(huán)境,如果沒(méi)有g(shù)cc需要在線(xiàn)安裝
[root@localhost ~]# yum -y install gcc-c++
如果有GCC環(huán)境,只需輸入命令:
[root@localhost ~]# gcc
出現(xiàn) :gcc: no input files 表示安裝成功。
安裝步驟redis:
一、將redis的源碼包上傳到linux系統(tǒng)。
二、解壓縮redis到/usr/tool/redis/redis-4.0.11/
三、進(jìn)行編譯。 cd到解壓后的目錄 輸入命令:make
四、進(jìn)行安裝。 輸入命令:make install PREFIX=/usr/tool/redis/redis-4.0.11/
PREFIX 必須是大寫(xiě)的。
五:檢查目錄是否存在。
在/usr/tool/redis/redis-4.0.11/ 下 有bin 說(shuō)明安裝成功。
測(cè)試連接redis
進(jìn)入到安裝redis的bin目錄下
[root@localhost /]# cd /usr/tool/redis/redis-4.0.11/bin
執(zhí)行如下命令在前端啟動(dòng)redis
[root@localhost bin]# ./redis-server
看到如下圖即表示啟動(dòng)成功,按Ctrl+c就可退出
image.png
后臺(tái)啟動(dòng)(主要啟動(dòng)方式)
一、把redis-4.0.11目錄下的redis.conf 復(fù)制到//usr/tool/redis/redis-4.0.11/bin目錄下
[root@localhost redis-4.0.11]# cp redis.conf /usr/tool/redis/redis-4.0.11/bin
二、使用vim命令修改redis.conf配置文件 將daemonize no修改為daemonize yes
image.png
三、修改綁定端口,不然只有本機(jī)能訪(fǎng)問(wèn),注釋這一行
image.png
四:輸入啟動(dòng)命令
[root@localhost bin]# ./redis-server redis.conf
五、客戶(hù)端Redis-cli連接redis
使用Redis-cli建立連接
[root@localhost redis-4.0.11]# cd /usr/tool/redis/redis-4.0.11/bin/
[root@localhost bin]# ./redis-cli
image.png
默認(rèn)連接localhost運(yùn)行在6379端口的redis服務(wù)。
完整寫(xiě)法如下
[root@localhost bin]# ./redis-cli -h 127.0.0.1 -p 6379
-h:連接的服務(wù)器的地址
-p:服務(wù)的端口號(hào)
退出連接界面
第一種:
[root@localhost bin]# ./redis-cli
127.0.0.1:6379> quit
第二種:
[root@localhost bin]# ./redis-cli
127.0.0.1:6379> exit
第三種:CTR+C
[root@localhost bin]#
關(guān)閉Redis服務(wù)
一、通過(guò)連接上客戶(hù)端進(jìn)行關(guān)閉,使用shutdown 命令。
image.png
或者:cd 到redis的bin 目錄 再執(zhí)行以下:
[root@localhost bin]# ./redis-cli shutdown
第二種:使用 kill 命令。
找到對(duì)應(yīng)的redis的進(jìn)程id 然后使用命令:(pid為進(jìn)程id)
kill -9 pid
Redis集群的搭建
Redis 3.0 之后便支持集群。Redis 集群中內(nèi)置了 16384 個(gè)哈希槽。Redis 會(huì)根據(jù)節(jié)點(diǎn)數(shù)量大致均等的將哈希槽映射到不同的節(jié)點(diǎn)。
所有節(jié)點(diǎn)之間彼此互聯(lián)(PING-PONG機(jī)制),當(dāng)超過(guò)半數(shù)的主機(jī)認(rèn)為某臺(tái)主機(jī)掛了,則該主機(jī)就是真的掛掉了,整個(gè)集群就不可用了。
若給集群中的每臺(tái)主機(jī)分配多臺(tái)從機(jī)。主機(jī)掛了,從機(jī)上位,依然能正常工作。但是若集群中超過(guò)半數(shù)的主機(jī)掛了,無(wú)論是否有從機(jī),該集群也是不可用的。
集群搭建環(huán)境
搭建ruby環(huán)境
[root@localhost~]# yum install ruby
[root@localhost~]# yum install rubygems
[root@localhost~]# gem install redis
[root@localhost~]# cd /usr/tool/redis/redis-4.0.11/src
[root@localhost src]# cp redis-trib.rb /usr/tool/redis-cluster/
第一步:安裝 ruby 環(huán)境
第二步:安裝 gem 軟件包(gem是用來(lái)擴(kuò)展或修改Ruby應(yīng)用程序的)。參考地址:https://rubygems.org/gems/redis/versions/
第三步:在redis解壓目錄中找到 redis-trib.rb 文件,將其拷貝到redis-cluster目錄下,方便管理。
可能存在的問(wèn)題
1 redis requires Ruby version >= 2.2.2,Ruby版本過(guò)低解決方法如下
2 沒(méi)有/usr/local/rvm/scripts/rvm 這個(gè)目錄.可能是上一步執(zhí)行失敗
[root@localhost~]# ruby --version
ruby 1.8.7 (2013-06-27 patchlevel 374) [x86_64-linux]
[root@localhost~]# yum install curl
[root@localhost~]# curl -L get.rvm.io | bash -s stable
[root@localhost~]# source /usr/local/rvm/scripts/rvm
[root@localhost~]# rvm list known
[root@localhost~]# rvm install 2.4.4
[root@localhost~]# rvm use 2.4.4
[root@localhost ~]# gem install redis
搭建步驟
需要6臺(tái)redis服務(wù)器。搭建偽分布式。
需要6個(gè)redis實(shí)例。
需要運(yùn)行在不同的端口6001-6006
使用之前搭建好的redis實(shí)例 。
注意:搭建前 如果節(jié)點(diǎn)里有數(shù)據(jù),需要?jiǎng)h除(rdb文件,aof文件)。
1、創(chuàng)建6個(gè)redis實(shí)例,每個(gè)實(shí)例運(yùn)行在不同的端口。需要修改redis.conf配置文件。配置文件中還需要把cluster-enabled yes前的注釋去掉。
創(chuàng)建目錄:
[root@localhost tool]# mkdir redis-cluster
[root@localhost bin]# cd /usr/tool/redis
copy 之前搭建好的redis 并改名為redis01
[root@localhost redis]# cp redis-4.0.11/ /usr/tool/redis-cluster/redis07 -r
進(jìn)入redis-cluster目錄中cd到redis01的bin目錄,刪除數(shù)據(jù)文件
[root@localhost local]# cd redis-cluster/redis01/bin
[root@localhost bin]# rm -rf *.rdb *.aof
修改redis.conf,取消注釋,如圖
[root@localhost bin]# vim redis.conf
image.png
進(jìn)入redis-cluster目錄
copy六份并分別命名為redis02,redis03,redis04,redis05,redis06
[root@localhost redis-cluster]# cp redis01 redis02 -r
[root@localhost redis-cluster]# cp redis01 redis03 -r
[root@localhost redis-cluster]# cp redis01 redis04 -r
[root@localhost redis-cluster]# cp redis01 redis05 -r
[root@localhost redis-cluster]# cp redis01 redis06 -r
cd到每一個(gè)實(shí)例的bin目錄,修改每一個(gè)redis實(shí)例的端口分別改為6001-6006
[root@localhost bin]# vim redis.conf
tool
第二步:?jiǎn)?dòng)每個(gè)redis實(shí)例。
vim redis-cluster-start-all.sh
添加如下文字到文件中:
cd /usr/tool/redis-cluster/redis01/bin
./redis-server redis.conf
cd /usr/tool/redis-cluster/redis02/bin
./redis-server redis.conf
cd /usr/tool/redis-cluster/redis03/bin
./redis-server redis.conf
cd /usr/tool/redis-cluster/redis04/bin
./redis-server redis.conf
cd /usr/tool/redis-cluster/redis05/bin
./redis-server redis.conf
cd /usr/tool/redis-cluster/redis06/bin
./redis-server redis.conf
修改文件:redis-cluster-start-all.sh 的權(quán)限,讓其可執(zhí)行。
chmod u+x redis-cluster-start-all.sh
執(zhí)行啟動(dòng)
[root@localhost redis-cluster]# ./redis-cluster-start-all.sh
[root@localhost /]# cd /usr/tool/redis-cluster/
[root@localhost redis-cluster]# ./redis-trib.rb create --replicas 1 192.168.65.129:6001 192.168.65.129:6002 192.168.65.129:6003 192.168.65.129:6004 192.168.65.129:6005 192.168.65.129:6006
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.65.129:6001
192.168.65.129:6002
192.168.65.129:6003
Adding replica 192.168.65.129:6005 to 192.168.65.129:6001
Adding replica 192.168.65.129:6006 to 192.168.65.129:6002
Adding replica 192.168.65.129:6004 to 192.168.65.129:6003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 59537b200756a98c46391a1f02060373aef58892 192.168.65.129:6001
slots:0-5460 (5461 slots) master
M: 9350b506f4317564cba1213143ce7d58608dee5c 192.168.65.129:6002
slots:5461-10922 (5462 slots) master
M: 6aa8a4110c29ff5aab8d002a2c186e44ebacb062 192.168.65.129:6003
slots:10923-16383 (5461 slots) master
S: 994d234d6e1fb0a3a105f4cb2aa077e01b002d3a 192.168.65.129:6004
replicates 59537b200756a98c46391a1f02060373aef58892
S: c7210a9323cd3e00d66fec21e46b9cb0c4a67906 192.168.65.129:6005
replicates 9350b506f4317564cba1213143ce7d58608dee5c
S: be597675bc4272c49260936b692b4a95dd0f7d1d 192.168.65.129:6006
replicates 6aa8a4110c29ff5aab8d002a2c186e44ebacb062
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 192.168.65.129:6001)
M: 59537b200756a98c46391a1f02060373aef58892 192.168.65.129:6001
slots:0-5460 (5461 slots) master
1 additional replica(s)
M: 6aa8a4110c29ff5aab8d002a2c186e44ebacb062 192.168.65.129:6003
slots:10923-16383 (5461 slots) master
1 additional replica(s)
S: c7210a9323cd3e00d66fec21e46b9cb0c4a67906 192.168.65.129:6005
slots: (0 slots) slave
replicates 9350b506f4317564cba1213143ce7d58608dee5c
S: be597675bc4272c49260936b692b4a95dd0f7d1d 192.168.65.129:6006
slots: (0 slots) slave
replicates 6aa8a4110c29ff5aab8d002a2c186e44ebacb062
S: 994d234d6e1fb0a3a105f4cb2aa077e01b002d3a 192.168.65.129:6004
slots: (0 slots) slave
replicates 59537b200756a98c46391a1f02060373aef58892
M: 9350b506f4317564cba1213143ce7d58608dee5c 192.168.65.129:6002
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.
[root@localhost redis-cluster]#
看到如上信息,集群配置成功
創(chuàng)建關(guān)閉集群的腳本:(不是必須的)
首先使用:vim 命令創(chuàng)建一個(gè)文件 redis-cluster-stop-all.sh
編輯文件,添加如下:
cd /usr/tool/redis-cluster/redis01/bin
./redis-cli -p 6001 shutdown
cd /usr/tool/redis-cluster/redis02/bin
./redis-cli -p 6002 shutdown
cd /usr/tool/redis-cluster/redis03/bin
./redis-cli -p 6003 shutdown
cd /usr/tool/redis-cluster/redis04/bin
./redis-cli -p 6004 shutdown
cd /usr/tool/redis-cluster/redis05/bin
./redis-cli -p 6005 shutdown
cd /usr/tool/redis-cluster/redis06/bin
./redis-cli -p 6006 shutdown
修改文件:redis-cluster-stop-all.sh 的權(quán)限,讓其可執(zhí)行。
chmod u+x redis-cluster-stop-all.sh
代碼使用集群
把jedis依賴(lài)的jar包添加到工程中。Maven工程中需要把jedis的坐標(biāo)添加到依賴(lài)。
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
redis 4.0版本以后,jedis版本不能低于2.9,不然會(huì)報(bào)一下錯(cuò)誤
java.lang.NumberFormatException: For input string: "6003@16003"
創(chuàng)建測(cè)試類(lèi)
如果本機(jī)能訪(fǎng)問(wèn)redis,代碼不能訪(fǎng)問(wèn),可能是防火墻問(wèn)題
centOS7關(guān)閉防火墻命令
systemctl stop firewalld
public class TestRedis {
public static void main(String[] args){
try{
//testJedis();
//testJedisPool();
testJedisCluster();
}catch (Exception e){
e.printStackTrace();
}
}
public static void testJedis() throws Exception {
// 第一步:創(chuàng)建一個(gè)Jedis對(duì)象。需要指定服務(wù)端的ip及端口。
Jedis jedis = new Jedis("192.168.65.129", 6379);
// 第二步:使用Jedis對(duì)象操作數(shù)據(jù)庫(kù),每個(gè)redis命令對(duì)應(yīng)一個(gè)方法。
jedis.set("hello", "world");
String result = jedis.get("hello");
// 第三步:打印結(jié)果。
System.out.println(result);
// 第四步:關(guān)閉Jedis
jedis.close();
}
public static void testJedisPool() throws Exception {
// 第一步:創(chuàng)建一個(gè)JedisPool對(duì)象。需要指定服務(wù)端的ip及端口。
JedisPool jedisPool = new JedisPool("192.168.65.129", 6379);
// 第二步:從JedisPool中獲得Jedis對(duì)象。
Jedis jedis = jedisPool.getResource();
// 第三步:使用Jedis操作redis服務(wù)器。
jedis.set("jedis", "test");
String result = jedis.get("jedis");
System.out.println(result);
// 第四步:操作完畢后關(guān)閉jedis對(duì)象,連接池回收資源。
jedis.close();
// 第五步:關(guān)閉JedisPool對(duì)象。
jedisPool.close();
}
public static void testJedisCluster() throws Exception {
// 第一步:使用JedisCluster對(duì)象。需要一個(gè)Set<HostAndPort>參數(shù)。Redis節(jié)點(diǎn)的列表。
Set<HostAndPort> nodes = new HashSet<HostAndPort>();
nodes.add(new HostAndPort("192.168.65.129", 6001));
nodes.add(new HostAndPort("192.168.65.129", 6002));
nodes.add(new HostAndPort("192.168.65.129", 6003));
nodes.add(new HostAndPort("192.168.65.129", 6004));
nodes.add(new HostAndPort("192.168.65.129", 6005));
nodes.add(new HostAndPort("192.168.65.129", 6006));
JedisCluster jedisCluster = new JedisCluster(nodes);
// 第二步:直接使用JedisCluster對(duì)象操作redis。在系統(tǒng)中單例存在。
jedisCluster.set("hello", "100");
String result = jedisCluster.get("hello");
// 第三步:打印結(jié)果
System.out.println(result);
// 第四步:系統(tǒng)關(guān)閉前,關(guān)閉JedisCluster對(duì)象。
jedisCluster.close();
}
}






