Docker部署Spring Boot与Redis集群实战

Docker 环境下实现 Spring Boot + Redis 集群

环境准备

确保 Docker 和 Docker Compose 已安装并运行。建议使用最新版本的 Docker 以支持 Swarm 模式或其他集群功能。同时,安装 JDK 和 Maven 用于 Spring Boot 项目的构建。

创建 Redis 集群

Redis 集群通常由多个节点组成,至少需要 3 个主节点和 3 个从节点以实现高可用性。以下是一个 docker-compose.yml 文件的示例,用于启动 Redis 集群:

version: '3'
services:
  redis-node1:
    image: redis:latest
    ports:
      - "7001:6379"
    command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
    networks:
      - redis-cluster
  redis-node2:
    image: redis:latest
    ports:
      - "7002:6379"
    command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
    networks:
      - redis-cluster
  redis-node3:
    image: redis:latest
    ports:
      - "7003:6379"
    command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
    networks:
      - redis-cluster
  redis-node4:
    image: redis:latest
    ports:
      - "7004:6379"
    command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
    networks:
      - redis-cluster
  redis-node5:
    image: redis:latest
    ports:
      - "7005:6379"
    command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
    networks:
      - redis-cluster
  redis-node6:
    image: redis:latest
    ports:
      - "7006:6379"
    command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
    networks:
      - redis-cluster
networks:
  redis-cluster:
    driver: bridge

运行以下命令启动 Redis 容器:

docker-compose up -d

配置 Redis 集群

进入任意一个 Redis 容器,执行以下命令创建集群:

docker exec -it redis-node1 bash
redis-cli --cluster create 172.20.0.2:6379 172.20.0.3:6379 172.20.0.4:6379 172.20.0.5:6379 172.20.0.6:6379 172.20.0.7:6379 --cluster-replicas 1

创建 Spring Boot 项目

使用 Spring Initializr 创建一个新的 Spring Boot 项目,添加以下依赖:

  • Spring Web
  • Spring Data Redis

pom.xml 中添加 Lettuce 依赖以支持 Redis 集群:

<dependency>
    <groupId>io.lettuce</groupId>
    <artifactId>lettuce-core</artifactId>
    <version>6.1.5.RELEASE</version>
</dependency>

配置 Spring Boot 连接 Redis 集群

application.propertiesapplication.yml 中配置 Redis 集群信息:

spring:
  redis:
    cluster:
      nodes: 172.20.0.2:6379,172.20.0.3:6379,172.20.0.4:6379,172.20.0.5:6379,172.20.0.6:6379,172.20.0.7:6379
      max-redirects: 3
    lettuce:
      pool:
        max-active: 8
        max-idle: 8
        min-idle: 0

编写 Redis 操作代码

创建一个简单的服务类,用于测试 Redis 集群的连接和操作:

@Service
public class RedisService {
    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    public void setKey(String key, String value) {
        redisTemplate.opsForValue().set(key, value);
    }

    public String getKey(String key) {
        return redisTemplate.opsForValue().get(key);
    }
}

测试 Redis 集群

创建一个简单的 REST 控制器,测试 Redis 集群的功能:

@RestController
@RequestMapping("/redis")
public class RedisController {
    @Autowired
    private RedisService redisService;

    @PostMapping("/set")
    public String setKey(@RequestParam String key, @RequestParam String value) {
        redisService.setKey(key, value);
        return "Key set successfully";
    }

    @GetMapping("/get")
    public String getKey(@RequestParam String key) {
        return redisService.getKey(key);
    }
}

构建和运行 Spring Boot 应用

使用 Maven 构建项目并运行:

mvn clean package
java -jar target/your-application.jar

验证功能

通过 Postman 或 curl 测试 API:

curl -X POST "http://localhost:8080/redis/set?key=test&value=hello"
curl -X GET "http://localhost:8080/redis/get?key=test"

容器化 Spring Boot 应用

创建 Dockerfile 用于构建 Spring Boot 应用的镜像:

FROM openjdk:11-jre-slim
COPY target/your-application.jar /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]

构建并运行 Spring Boot 容器:

docker build -t spring-boot-redis .
docker run -p 8080:8080 --network redis-cluster --name spring-boot-app spring-boot-redis

高可用性和扩展性

通过 Docker Swarm 或 Kubernetes 可以进一步扩展 Redis 集群和 Spring Boot 应用,实现负载均衡和自动故障转移。例如,使用 Kubernetes 部署 Redis 集群时,可以利用 StatefulSet 和 Headless Service 管理 Redis 节点。

监控和日志

使用 Prometheus 和 Grafana 监控 Redis 集群的性能指标。通过 ELK 栈收集和分析日志,确保系统的稳定性和可维护性。

总结

通过 Docker 和 Docker Compose,可以快速部署 Redis 集群并与 Spring Boot 应用集成。这种方法不仅简化了开发环境的搭建,还为生产环境的高可用性和扩展性提供了基础。

BbS.okane173.info/PoSt/1121_464102.HtM
BbS.okane174.info/PoSt/1121_092917.HtM
BbS.okane175.info/PoSt/1121_012517.HtM
BbS.okane176.info/PoSt/1121_770949.HtM
BbS.okane177.info/PoSt/1121_210532.HtM
BbS.okane178.info/PoSt/1121_116447.HtM
BbS.okane179.info/PoSt/1121_442183.HtM
BbS.okane180.info/PoSt/1121_703336.HtM
BbS.okane181.info/PoSt/1121_032163.HtM
BbS.okane182.info/PoSt/1121_497726.HtM
BbS.okane173.info/PoSt/1121_424279.HtM
BbS.okane174.info/PoSt/1121_947516.HtM
BbS.okane175.info/PoSt/1121_547555.HtM
BbS.okane176.info/PoSt/1121_561914.HtM
BbS.okane177.info/PoSt/1121_712686.HtM
BbS.okane178.info/PoSt/1121_390072.HtM
BbS.okane179.info/PoSt/1121_520939.HtM
BbS.okane180.info/PoSt/1121_849513.HtM
BbS.okane181.info/PoSt/1121_021627.HtM
BbS.okane182.info/PoSt/1121_346489.HtM
BbS.okane173.info/PoSt/1121_758992.HtM
BbS.okane174.info/PoSt/1121_454037.HtM
BbS.okane175.info/PoSt/1121_392632.HtM
BbS.okane176.info/PoSt/1121_162652.HtM
BbS.okane177.info/PoSt/1121_366195.HtM
BbS.okane178.info/PoSt/1121_729742.HtM
BbS.okane179.info/PoSt/1121_373858.HtM
BbS.okane180.info/PoSt/1121_889990.HtM
BbS.okane181.info/PoSt/1121_509934.HtM
BbS.okane182.info/PoSt/1121_173099.HtM
BbS.okane173.info/PoSt/1121_091623.HtM
BbS.okane174.info/PoSt/1121_577755.HtM
BbS.okane175.info/PoSt/1121_419018.HtM
BbS.okane176.info/PoSt/1121_639374.HtM
BbS.okane177.info/PoSt/1121_928740.HtM
BbS.okane178.info/PoSt/1121_365531.HtM
BbS.okane179.info/PoSt/1121_626632.HtM
BbS.okane180.info/PoSt/1121_391807.HtM
BbS.okane181.info/PoSt/1121_705022.HtM
BbS.okane182.info/PoSt/1121_020512.HtM
BbS.okane173.info/PoSt/1121_740294.HtM
BbS.okane174.info/PoSt/1121_216927.HtM
BbS.okane175.info/PoSt/1121_923733.HtM
BbS.okane176.info/PoSt/1121_110279.HtM
BbS.okane177.info/PoSt/1121_033183.HtM
BbS.okane178.info/PoSt/1121_984311.HtM
BbS.okane179.info/PoSt/1121_266669.HtM
BbS.okane180.info/PoSt/1121_566061.HtM
BbS.okane181.info/PoSt/1121_051715.HtM
BbS.okane182.info/PoSt/1121_909578.HtM
BbS.okane173.info/PoSt/1121_133950.HtM
BbS.okane174.info/PoSt/1121_224604.HtM
BbS.okane175.info/PoSt/1121_295146.HtM
BbS.okane176.info/PoSt/1121_199559.HtM
BbS.okane177.info/PoSt/1121_271657.HtM
BbS.okane178.info/PoSt/1121_281017.HtM
BbS.okane179.info/PoSt/1121_552185.HtM
BbS.okane180.info/PoSt/1121_313150.HtM
BbS.okane181.info/PoSt/1121_374260.HtM
BbS.okane182.info/PoSt/1121_073144.HtM
BbS.okane173.info/PoSt/1121_902383.HtM
BbS.okane174.info/PoSt/1121_582384.HtM
BbS.okane175.info/PoSt/1121_381810.HtM
BbS.okane176.info/PoSt/1121_694724.HtM
BbS.okane177.info/PoSt/1121_394787.HtM
BbS.okane178.info/PoSt/1121_162584.HtM
BbS.okane179.info/PoSt/1121_832518.HtM
BbS.okane180.info/PoSt/1121_497087.HtM
BbS.okane181.info/PoSt/1121_375699.HtM
BbS.okane182.info/PoSt/1121_825575.HtM
BbS.okane173.info/PoSt/1121_800980.HtM
BbS.okane174.info/PoSt/1121_733834.HtM
BbS.okane175.info/PoSt/1121_657488.HtM
BbS.okane176.info/PoSt/1121_495320.HtM
BbS.okane177.info/PoSt/1121_780601.HtM
BbS.okane178.info/PoSt/1121_019219.HtM
BbS.okane179.info/PoSt/1121_343345.HtM
BbS.okane180.info/PoSt/1121_489681.HtM
BbS.okane181.info/PoSt/1121_039117.HtM
BbS.okane182.info/PoSt/1121_734385.HtM

#牛客AI配图神器#

全部评论

相关推荐

10-20 11:11
辽宁大学 营销
点赞 评论 收藏
分享
在笔试的大西瓜很矫健:这跟数分八竿子打不着,先去了解实习要会什么再说找实习吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务