1. 程式人生 > >springBoot整合redisCluster(redis叢集)模式。

springBoot整合redisCluster(redis叢集)模式。

最近準備弄一個springBoot電商秒殺的demo專案,在搭建後臺框架時,非關係型資料庫準備整合redis,之前用的是單機版,考慮到是電商專案,後面用jmeter做壓力測試效果可能不好,於是想試試redisCluster叢集模式,看看併發qps變化效果,在網上看了很多部落格吸取到了很多幹貨,但是很多都不全只是寫了程式碼這塊怎麼整合的例子,並沒有指出redis部署叢集的教程,所以摸索成功之後覺得有必要分享出來整套的東西,讓整合的人少踩坑,廢話不多說下面開始。

 1.在windows上進行redis叢集部署。

    參考這位兄弟的帖子:https://blog.csdn.net/zsg88/article/details/73715947

點選開啟連結

    帖子裡面Ruby 環境安裝的地址已經失效,我是在這裡下載安裝的

另外如果專案裡配置的redis地址用電腦ip的話,需要去redis安裝目錄下的redis.windows.conf配置檔案裡更改一下預設綁    定的ip,改掉預設bind 127.0.0.1為bind 0.0.0.0,這樣的話redis就可以供別的機器訪問了。

    部署完成最終效果圖


2.springBoot架構整合

 ①springBoot架構建立(這裡不做過多描述,推薦使用idea一鍵建立)。

 ②pom檔案增加依賴。

<dependency>
    <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency>

③.配置application.yml或application.properties配置檔案

spring:
    redis:
       cache.clusterNodes: 127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382,127.0.0.1:6383,127.0.0.1:6384
       cache.commandTimeout: 5000

④.建立RedisProperties裝載配置到物件

package com.springboot.buying.snapup.utils.redis;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
 * @Author: nanjunyu
 * @Description:讀取redis配置資訊並裝載
* @Date: Create in  2018/6/14 16:16
 */
@Component
@ConfigurationProperties(prefix = "spring.redis.cache")
public class RedisProperties {
    private int expireSeconds;
    private String clusterNodes;
    private int commandTimeout;
    public int getExpireSeconds() {
        return expireSeconds;
}

    public void setExpireSeconds(int expireSeconds) {
        this.expireSeconds = expireSeconds;
}

    public String getClusterNodes() {
        return clusterNodes;
}

    public void setClusterNodes(String clusterNodes) {
        this.clusterNodes = clusterNodes;
}

    public int getCommandTimeout() {
        return commandTimeout;
}

    public void setCommandTimeout(int commandTimeout) {
        this.commandTimeout = commandTimeout;
}
}

⑤.建立JedisClusterConfig讀取讀取配置資訊

package com.springboot.buying.snapup.utils.redis;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import java.util.HashSet;
import java.util.Set;
/**
 * @Author: nanjunyu
 * @Description:
* @Date: Create in  2018/6/14 16:28
 */
@Configuration
public class JedisClusterConfig {
    @Autowired
private RedisProperties redisProperties;
    public JedisCluster getJedisCluster(){
        String [] serverArray=redisProperties.getClusterNodes().split(",");
Set<HostAndPort> nodes=new HashSet<>();
        for (String ipPort:serverArray){
            String [] ipPortPair=ipPort.split(":");
nodes.add(new HostAndPort(ipPortPair[0].trim(),Integer.valueOf(ipPortPair[1].trim())));
}
        return  new JedisCluster(nodes,redisProperties.getCommandTimeout());
}

}

⑥.建立RedisClientTemplate介面進行set  get測試  這裡簡單寫了兩個方法,自行修改

package com.springboot.buying.snapup.utils.redis;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
 * @Author: nanjunyu
 * @Description:
* @Date: Create in  2018/6/14 16:34
 */
@Service
public class RedisClientTemplate {
    private static final Logger log=LoggerFactory.getLogger(RedisClientTemplate.class);
@Autowired
private JedisClusterConfig jedisClusterConfig;
    public boolean setToRedis(String key,Object value){
        try {
        String str=jedisClusterConfig.getJedisCluster().set(key, String.valueOf(value));
        if("OK".equals(str))
            return true;
        }catch (Exception ex){
            log.error("setToRedis:{Key:"+key+",value"+value+"}",ex);
}
        return false;
}

    public Object getRedis(String key){
        String str=null;
        try {
             str=jedisClusterConfig.getJedisCluster().get(key);
}catch (Exception ex){
            log.error("getRedis:{Key:"+key+"}",ex);
}
        return str;
}
    
}

ok到這裡我們redis叢集搭建好了,程式碼配置也都弄好了,現在我們建立一個controller見證奇蹟吧!

package com.springboot.buying.snapup.controller;
import com.springboot.buying.snapup.utils.redis.RedisClientTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * @Author: nanjunyu
 * @Description:
* @Date: Create in  2018/6/14 17:31
 */
@RestController
@RequestMapping(value = "/test")
public class TestController {

    @Autowired
RedisClientTemplate redisClientTemplate;
@GetMapping(value = "/testSet")
    public Object testSet(){
        redisClientTemplate.setToRedis("Frank","Frank測試redis");
System.out.println(redisClientTemplate.getRedis("Frank"));
        return null;
}

}

下面就是見證奇蹟的時刻。。

到這裡我們的springBoot整合redisCluster叢集模式就完成了  ,謝謝大家觀看,有問題留言。