本文主要記錄一下Redis集羣的搭建過程
第一步:去Redis官網(https://redis.io/download)下載最新版本的redis的安裝包:redis-5.0.4.tar.gz
第二步:在linux系統中新建一個文件夾(比如ydd),通過xftp工具上傳下載的安裝包到這個文件夾裏面
第三步:進入你上傳的安裝包所在的目錄,解壓文件(命令:tar -zxvf redis-5.0.4.tar.gz)
第四步:進入解壓包(cd /ydd/redis-5.0.4)進行編譯安裝到指定目錄(make PREFIX=/ydd/redis install),安裝完畢之後 redis文件夾下面會生成一個bin目錄
第五步:這個時候,在/ydd目錄下面,新建一個文件夾,redis-cluster,在這個redis-cluster目錄下面建6個文件夾分別爲7001、7002、7003、7004、7005、7006(我這使用的是端口號)
第六步:把第四步當中的bin目錄分別複製到7001-7006的目錄下面
第七步:這個時候,在7001-7006下面的bin目錄裏面,都缺少一個redis.conf文件。這個時候,去redis-5.0.4目錄下面,有redis.conf文件,分別複製到7001-7006的bin目錄下面
第八步:分別修改7001-7006下面的redis.conf文件。修改三個地方:
port xxxx
cluster-enabled yes
bind xxx.xxx.xxx.xxx(這裏一定要寫IP,別寫127.0.0.1)
第九步:分別cd到對應目錄下面的bin目錄,然後分別執行下面的啓動命名
注意是分別,就是cd /ydd/redis-cluster/7001/bin 執行第一條命令,cd /ydd/redis-cluster/7002/bin 執行第二條命令,因爲我沒有把redis-server加入到系統的bin目錄下面
/ydd/redis-cluster/7001/bin/redis-server /ydd/redis-cluster/7001/bin/redis.conf
/ydd/redis-cluster/7002/bin/redis-server /ydd/redis-cluster/7002/bin/redis.conf
/ydd/redis-cluster/7003/bin/redis-server /ydd/redis-cluster/7003/bin/redis.conf
/ydd/redis-cluster/7004/bin/redis-server /ydd/redis-cluster/7004/bin/redis.conf
/ydd/redis-cluster/7005/bin/redis-server /ydd/redis-cluster/7005/bin/redis.conf
/ydd/redis-cluster/7006/bin/redis-server /ydd/redis-cluster/7006/bin/redis.conf
啓動之後可用下面命令查看是否啓動:ps -ef | grep redis
也可以用下面命名連接到對應的redis上面去:/ydd/redis/bin/redis-cli -h xxx.xxx.xxx.xxx -p 7001
在執行這個命名的時候,可能會出現Permission denied,解決的辦法爲給這個目錄賦予操作權限:sudo chmod -R 777 /ydd
第十步:執行集羣搭建命令,出現下面的畫面代表搭建成功
/ydd/redis/bin/redis-cli --cluster create
xxx.xxx.xxx.xxx:7001 xxx.xxx.xxx.xxx:7002
xxx.xxx.xxx.xxx:7003 xxx.xxx.xxx.xxx:7004
xxx.xxx.xxx.xxx:7005 xxx.xxx.xxx.xxx:7006
--cluster-replicas 1
第十一步:構建程序(在這裏使用Spring Boot)去操作Redis集羣
pom.xml文件引入下面依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
Redis配置
# 配置redis集羣信息
# REDIS (RedisProperties)
# Redis數據庫索引(默認爲0)
#spring.redis.database=3
# redis集羣地址信息
spring.redis.cluster.nodes=xxx.xx.xxx.xxx:7001 xxx.xx.xxx.xxx:7002 xxx.xx.xxx.xxx:7003 xxx.xx.xxx.xxx:7004 xxx.xx.xxx.xxx:7005 xxx.xx.xxx.xxx:7006
# Redis服務器連接端口
#spring.redis.port=6379
# Redis服務器連接密碼(默認爲空)
#spring.redis.password=
# 連接池最大連接數(使用負值表示沒有限制)
spring.redis.pool.max-active=20
# 連接池最大阻塞等待時間(使用負值表示沒有限制)
spring.redis.pool.max-wait=-1
# 連接池中的最大空閒連接
spring.redis.pool.max-idle=8
# 連接池中的最小空閒連接
spring.redis.pool.min-idle=0
# 連接超時時間(毫秒)
spring.redis.timeout=5000
建立對應的RedisConfig類
@Configuration
public class RedisConfig {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Value("${spring.redis.cluster.nodes}")
private String clusterNodes;
@Value("${spring.redis.timeout}")
private int timeout;
@Value("${spring.redis.pool.max-idle}")
private int maxIdle;
@Value("${spring.redis.pool.max-wait}")
private long maxWaitMillis;
@Value("${spring.redis.timeout}")
private int commandTimeout;
@Bean
public JedisCluster getJedisCluster() {
String[] cNodes = clusterNodes.split(",");
Set<HostAndPort> nodes =new HashSet<>();
//分割出集羣節點
for(String node : cNodes) {
String[] hp = node.split(":");
nodes.add(new HostAndPort(hp[0],Integer.parseInt(hp[1])));
}
JedisPoolConfig jedisPoolConfig =new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(maxIdle);
jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
//創建集羣對象
JedisCluster jedisCluster = new JedisCluster(nodes,commandTimeout);
logger.info("連接redis集羣成功");
return jedisCluster;
}
}
在需要使用的類當中,注入JedisCluster進行Redis集羣操作
@Autowired
private JedisCluster jedisCluster;
jedisCluster.set("userName", "hello redis cluster");
jedisCluster.get("userName");