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叢集模式就完成了 ,謝謝大家觀看,有問題留言。