当前位置:   article > 正文

Redisson连接Redis单机&集群&哨兵配置示例_redissonconfig集群配置

redissonconfig集群配置

Redisson简介

         Redission是什么就不在这里多说了,可以自己百度或者查看最强分布式锁工具

Redisson配置

        看了很多博主对 Redission配置基本都是单机模式,实际生产环境Redis部署有主从、哨兵、集群; Redission对不同Redis模式的配置区别挺大;同时,现在大部分项目都是SpringBoot项目,对Redis的使用基本都是使用Spring官网的starter;

        所以这里基于SpringBoot-1.5.22.RELEASE,解释一下结合spring-boot-starter-data-redis集成Redission的用法

pom依赖

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>1.5.22.RELEASE</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.idto</groupId>
  12. <artifactId>redis-demo</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>redis-demo</name>
  15. <description>redis-demo</description>
  16. <properties>
  17. <java.version>1.8</java.version>
  18. </properties>
  19. <dependencies>
  20. <dependency>
  21. <groupId>org.redisson</groupId>
  22. <artifactId>redisson</artifactId>
  23. <version>3.15.3</version>
  24. </dependency>
  25. <dependency>
  26. <groupId>org.apache.commons</groupId>
  27. <artifactId>commons-lang3</artifactId>
  28. <version>3.12.0</version>
  29. </dependency>
  30. <dependency>
  31. <groupId>org.springframework.boot</groupId>
  32. <artifactId>spring-boot-starter-web</artifactId>
  33. </dependency>
  34. <dependency>
  35. <groupId>org.springframework.boot</groupId>
  36. <artifactId>spring-boot-starter-data-redis</artifactId>
  37. </dependency>
  38. </dependencies>
  39. <build>
  40. <plugins>
  41. <plugin>
  42. <groupId>org.springframework.boot</groupId>
  43. <artifactId>spring-boot-maven-plugin</artifactId>
  44. </plugin>
  45. </plugins>
  46. </build>
  47. </project>

RedissonClient创建

针对Redis不同的部署模式,对RedissonClient进行不同的初始化

  1. package com.idto.config;
  2. import org.apache.commons.lang3.StringUtils;
  3. import org.redisson.Redisson;
  4. import org.redisson.api.RedissonClient;
  5. import org.redisson.config.ClusterServersConfig;
  6. import org.redisson.config.Config;
  7. import org.redisson.config.SentinelServersConfig;
  8. import org.redisson.config.SingleServerConfig;
  9. import org.slf4j.Logger;
  10. import org.slf4j.LoggerFactory;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
  13. import org.springframework.context.annotation.Bean;
  14. import org.springframework.context.annotation.Configuration;
  15. import java.util.List;
  16. import java.util.Objects;
  17. @Configuration
  18. public class RedissonConfig {
  19. Logger log = LoggerFactory.getLogger(RedissonConfig.class);
  20. # 直接使用starter注入的redis配置信息
  21. @Autowired
  22. private RedisProperties redisProperties;
  23. private int timeout = 3000;
  24. private int connectionPoolSize = 64;
  25. private int connectionMinimumIdleSize = 10;
  26. private int pingConnectionInterval = 60000;
  27. private static String ADDRESS_PREFIX = "redis://";
  28. /**
  29. * 单机模式
  30. */
  31. @Bean
  32. public RedissonClient initBean() {
  33. // 哨兵模式
  34. RedisProperties.Sentinel sentinel = redisProperties.getSentinel();
  35. if (Objects.nonNull(sentinel)) {
  36. log.info("redis is sentinel mode");
  37. return redissonSentinel();
  38. }
  39. // 集群模式
  40. RedisProperties.Cluster cluster = redisProperties.getCluster();
  41. if (Objects.nonNull(cluster)) {
  42. log.info("redis is cluster mode");
  43. return redissonCluster();
  44. }
  45. // 单机模式
  46. String host = redisProperties.getHost();
  47. if (StringUtils.isNotBlank(host)) {
  48. log.info("redis is single mode");
  49. return redissonSingle();
  50. }
  51. log.error("redisson config can not support this redis mode");
  52. return null;
  53. }
  54. /**
  55. * 单机模式
  56. */
  57. private RedissonClient redissonSingle() {
  58. String host = redisProperties.getHost();
  59. String password = redisProperties.getPassword();
  60. int port = redisProperties.getPort();
  61. // 设置超时时间
  62. if (redisProperties.getTimeout() > 0) {
  63. timeout = redisProperties.getTimeout();
  64. }
  65. // 声明一个配置类
  66. Config config = new Config();
  67. SingleServerConfig serverConfig = config.useSingleServer()
  68. .setAddress(ADDRESS_PREFIX + host + ":" + port)
  69. .setTimeout(timeout)
  70. .setPingConnectionInterval(pingConnectionInterval)
  71. .setConnectionPoolSize(this.connectionPoolSize)
  72. .setConnectionMinimumIdleSize(this.connectionMinimumIdleSize);
  73. // 判断密码
  74. if (!StringUtils.isEmpty(password)) {
  75. serverConfig.setPassword(password);
  76. }
  77. return Redisson.create(config);
  78. }
  79. /**
  80. * 哨兵模式
  81. */
  82. private RedissonClient redissonSentinel() {
  83. // mymaster
  84. String masterName = redisProperties.getSentinel().getMaster();
  85. // 127.0.0.1:26389,127.0.0.1:26379
  86. String nodes = redisProperties.getSentinel().getNodes();
  87. String password = redisProperties.getPassword();
  88. // 设置超时时间
  89. if (redisProperties.getTimeout() > 0) {
  90. timeout = redisProperties.getTimeout();
  91. }
  92. // 声明一个配置类
  93. Config config = new Config();
  94. SentinelServersConfig sentinelServersConfig = config.useSentinelServers();
  95. // 扫描间隔
  96. sentinelServersConfig.setScanInterval(2000);
  97. // 判断密码
  98. if (!StringUtils.isEmpty(password)) {
  99. sentinelServersConfig.setPassword(password);
  100. }
  101. sentinelServersConfig.setMasterName(masterName);
  102. String[] nodeArr = StringUtils.split(nodes, ",");
  103. for (int i = 0; i < nodeArr.length; i++) {
  104. nodeArr[i] = ADDRESS_PREFIX + nodeArr[i];
  105. }
  106. // 添加redis节点
  107. sentinelServersConfig.addSentinelAddress(nodeArr);
  108. return Redisson.create(config);
  109. }
  110. /**
  111. * 集群模式
  112. */
  113. private RedissonClient redissonCluster() {
  114. // 192.168.116.156:1901,192.168.116.156:1902
  115. List<String> nodes = redisProperties.getCluster().getNodes();
  116. String password = redisProperties.getPassword();
  117. // 设置超时时间
  118. if (redisProperties.getTimeout() > 0) {
  119. timeout = redisProperties.getTimeout();
  120. }
  121. // 声明一个配置类
  122. Config config = new Config();
  123. ClusterServersConfig clusterServersConfig = config.useClusterServers();
  124. // 扫描间隔
  125. clusterServersConfig.setScanInterval(2000);
  126. // 判断密码
  127. if (!StringUtils.isEmpty(password)) {
  128. clusterServersConfig.setPassword(password);
  129. }
  130. // 添加redis节点
  131. for (String node : nodes) {
  132. clusterServersConfig.addNodeAddress(ADDRESS_PREFIX + node);
  133. }
  134. return Redisson.create(config);
  135. }
  136. }

Redis配置

  1. spring:
  2. redis:
  3. # 单机/主从模式
  4. # host: 192.168.8.129
  5. # port: 7001
  6. # 哨兵模式
  7. # sentinel:
  8. # master: mymaster
  9. # nodes: 192.168.8.129:27001,192.168.8.129:27002,192.168.8.129:27003
  10. # 集群模式
  11. cluster:
  12. nodes: 192.168.8.129:8001,192.168.8.129:8002,192.168.8.129:8003,192.168.8.129:8004,192.168.8.129:8005,192.168.8.129:8006
  13. # redis服务数据库下标
  14. database: 2
  15. # redis服务密码
  16. # password: 111111
  17. pool:
  18. max-idle: 100
  19. min-idle: 1
  20. max-active: 10
  21. max-wait: 5000

Redisson简单测试

  1. package com.idto.controller;
  2. import org.redisson.api.RLock;
  3. import org.redisson.api.RedissonClient;
  4. import org.slf4j.Logger;
  5. import org.slf4j.LoggerFactory;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.web.bind.annotation.GetMapping;
  8. import org.springframework.web.bind.annotation.RestController;
  9. import java.util.concurrent.TimeUnit;
  10. @RestController
  11. public class RedissionController {
  12. Logger log = LoggerFactory.getLogger(RedissionController.class);
  13. @Autowired
  14. private RedissonClient redissonClient;
  15. @GetMapping("/lock")
  16. public String lock() throws InterruptedException {
  17. String lockKey = "lock";
  18. RLock lock = redissonClient.getLock(lockKey);
  19. boolean lockResult = lock.tryLock();
  20. log.info("lock key {} lock result {}", lockKey, lockResult);
  21. TimeUnit.SECONDS.sleep(5);
  22. lock.unlock();
  23. log.info("lock key {} unlock ", lockKey);
  24. return System.currentTimeMillis() + "---" + lockResult;
  25. }
  26. }

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号