項目目錄結構: html
pom:java
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>redis</groupId> <artifactId>com.toov5.redis</artifactId> <version>0.0.1-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.RELEASE</version> </parent> <dependencies> <!-- SpringBoot web 核心組件 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <maimClass> com.itmayiedu.controller.IndexController</maimClass> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
yml:node
spring: redis: database: 0 # host: 192.168.91.3 # port: 6379 # password: 123 jedis: pool: max-active: 8 max-wait: -1 max-idle: 8 min-idle: 0 timeout: 10000 cluster: nodes: - 192.168.91.5:9001 - 192.168.91.5:9002 - 192.168.91.5:9003 - 192.168.91.5:9004 - 192.168.91.5:9005 - 192.168.91.5:9006 #####用代碼獲取配置文件 靈活獲取密碼方案
serviceweb
package com.toov5.service; import java.util.Set; import java.util.concurrent.TimeUnit; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Component; @Component public class RedisService { @Autowired private StringRedisTemplate stringRedisTemplate; //這樣該方法支持多種數據類型 public void set(String key , Object object, Long time){ // //開啓事務權限 // stringRedisTemplate.setEnableTransactionSupport(true); // try { // //開啓事務 // stringRedisTemplate.multi(); // // String argString =(String)object; //強轉下 // stringRedisTemplate.opsForValue().set(key, argString); // // //成功就提交 // stringRedisTemplate.exec(); // } catch (Exception e) { // //失敗了就回滾 // stringRedisTemplate.discard(); // // } if (object instanceof String ) { //判斷下是String類型不 String argString =(String)object; //強轉下 //存放String類型的 stringRedisTemplate.opsForValue().set(key, argString); } //若是存放Set類型 if (object instanceof Set) { Set<String> valueSet =(Set<String>)object; for(String string:valueSet){ stringRedisTemplate.opsForSet().add(key, string); //此處點擊下源碼看下 第二個參數能夠放好多 } } //設置有效期 if (time != null) { stringRedisTemplate.expire(key, time, TimeUnit.SECONDS); } } //作個封裝 public void setString(String key, Object object){ String argString =(String)object; //強轉下 //存放String類型的 stringRedisTemplate.opsForValue().set(key, argString); } public void setSet(String key, Object object){ Set<String> valueSet =(Set<String>)object; for(String string:valueSet){ stringRedisTemplate.opsForSet().add(key, string); //此處點擊下源碼看下 第二個參數能夠放好多 } } public String getString(String key){ return stringRedisTemplate.opsForValue().get(key); } }
controllerredis
package com.toov5.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.toov5.service.RedisService; @RestController public class IndexController { @Autowired private RedisService redisService; @RequestMapping("/setString") public String setString(String key, String value){ redisService.set(key, value, 500l); //超時時間500s l表示long型 return "成功"; } @RequestMapping("get") public String get(String key){ return redisService.getString(key); } }
啓動spring
package com.toov5.app; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication(scanBasePackages={"com.toov5.*"}) public class app { public static void main(String[] args) { SpringApplication.run(app.class, args); } }
結果:apache
Redis集羣使用CRC16對key進行hash,集羣固定使用16384對hash出來的值取模。由於取模結果必定在16384以內,因此集羣中的sharding(分片)實際就是如何將16384個值在n個主節點間分配(從節點是主節點的近似副本,緣由見3),如何分配取決於你的配置。app
Redis生產級集羣須要容災,爲此,通常部署爲n個主+n*m個從。n大小主要取決於單機性能,m大小主要取決於機器穩定性。maven
Redis集羣是弱一致性的,此處的一致,主要指主從之間的數據一致性。主要是由於redis在作數據更新時,不要求主從數據同步複製必定要成功。spring-boot
集羣最小的主數量爲3,主數量應爲奇數,以便作選舉判決。