当前位置: 首页 > news >正文

ShardingSphere-读写分离

ShardingSphere-读写分离

读写分离

  • 依赖于 MySQL的主从集群 搭建手册
  • 查询 走的是从库(Slave)
  • 新增、更新、删除走的是主库(Master)

MySQL主从集群

节点角色主机地址端口用户名密码库名
master192.168.40.1283306rootRoot@123456db_demo
slave192.168.40.1293306rootRoot@123456db_demo

创建 user

主节点执行见表语句

CREATE TABLE `user`  (`id` bigint NOT NULL,`client_id` bigint NOT NULL,`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`age` int NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

在这里插入图片描述

从节点刷新查看

在这里插入图片描述

项目代码

复用之前的 user 表操作代码即可

读写分离配置

application.yml

# 主从配置  读写分离
server:port: 8081spring:main:# 一个实体类对应两张表,覆盖allow-bean-definition-overriding: trueshardingsphere:datasource:names: m1,s1 # 主库 从库m1:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.40.128:3306/db_demo?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTCusername: rootpassword: Root@123456s1:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.40.129:3306/db_demo?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTCusername: rootpassword: Root@123456sharding:tables:user:# 分表策略  固定分配到主库的user表 即 m1.useractual-data-nodes: m1.user# 主库从库规则定义master-slave-rules:m1:# 主库master-data-source-name: m1# 从库slave-data-source-names: s1props:# 打印SQL日志sql:show: true

测试结果

新增测试

  • 测试类代码
@Test
void insert() {for (int i = 0; i < 5; i++) {User user = new User();user.setId(i + 1);user.setName("user_" + user.getId());user.setClientId(10000);user.setAge(18 + i);userMapper.insert(user);}}
  • 运行结果

操作的必须是主库 对应的数据源 m1
在这里插入图片描述

  • 主库查看

在这里插入图片描述

  • 从库查看

在这里插入图片描述

更新测试

  • 修改前

在这里插入图片描述

  • 测试类代码

修改 id=5 的记录的 name, user_5 => Tom

@Testvoid update() {User user = new User();user.setId(5);user.setName("Tom");userMapper.updateById(user);}
  • 运行结果

操作的必须是主库 对应的数据源 m1

在这里插入图片描述

  • 查看主库

在这里插入图片描述

  • 查看从库

在这里插入图片描述

删除测试

删除 id=5 的记录

  • 测试代码
@Test
void delete() {userMapper.deleteById(5);
}
  • 运行结果

操作的必须是主库 对应的数据源 m1

在这里插入图片描述

  • 查看主库

在这里插入图片描述

  • 查看从库

在这里插入图片描述

查询测试

指定ID查询,查找id为 2、3 的记录

  • 测试代码
@Test
void selectById() {List<User> list = userMapper.selectList(new QueryWrapper<User>().in("id", 2, 3));System.out.println(JSONArray.toJSONString(list));
}
  • 运行结果

操作的必须是从库 对应的数据源 s1

在这里插入图片描述

总结

  • 完美的诠释了 读写分离
  • 验证了 MySQL主从集群的正确性
  • 新增更新删除操作主库同步到从库
  • 查询 只能操作 从库

相关文章:

  • 2024 CKA模拟系统制作 | Step-By-Step | 10、题目搭建-调度 pod 到指定节点
  • 树莓派安装中文字体和中文输入法
  • 鸿蒙OSUniApp 开发支持图片和视频的多媒体展示组件#三方框架 #Uniapp
  • 基线配置管理:为什么它对网络稳定性至关重要
  • java上机测试错题回顾(2)
  • 鸿蒙OSUniApp 开发的商品筛选器与排序功能#三方框架 #Uniapp
  • 互联网大厂Java求职面试:从Spring到微服务的技术探讨
  • 预约按摩小程序源码介绍
  • 数据泄露频发,Facebook的隐私保护是否到位?
  • 青少年编程与数学 02-020 C#程序设计基础 07课题、控制结构
  • 理解vue-cli中的webpack
  • RabbitMQ搭建集群
  • kafka SASL/PLAIN 认证及 ACL 权限控制
  • Python整合Milvus向量数据库案例实战
  • 【Opencv+Yolo】Day2_图像处理
  • 探索C++标准模板库(STL):从容器到底层奥秘-全面解析String类高效技巧(上篇)
  • 在RK3588上实现YOLOv8n高效推理:从模型优化到GPU加速后处理全解析
  • element-ui upload 组件源码分享
  • C语言数据存储
  • 【b站计算机拓荒者】【2025】微信小程序开发教程 - chapter3 项目实践 - 2信息采集
  • 国家官方网站/百度权重优化软件
  • 电话怎么做网站域名/湛江seo推广公司
  • 网站开发项目经理/公司网站如何制作
  • 母婴护理服务网站模板/电商网站建设公司哪家好
  • 怎么给网站做推广/湖南网站seo营销
  • asp企业网站源码下载/企业网站推广方法实验报告