本文主要是介绍ShardingSphere之读写分离方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《ShardingSphere之读写分离方式》:本文主要介绍ShardingSphere之读写分离方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教...
ShardingSphere-读写分离
读写分离
- 依赖于 MySQL的主从集群 搭建手册
- 查询 走的是从库(Slave)
- 新增、更新、删除走的是主库(Master)
MySQL主从集群
节点角色 | 主机地址 | 端口 | 用户名 | 密码 | 库名 |
---|---|---|---|---|---|
master | 192.168.40.128 | 3306 | root | Root@123456 | db_demo |
slave | 192.168.40.129 | 3306 | root | Root@123456 | db_demo |
创建 user 表
主节点执行见表语句
CREATE TABLE `user` (China编程 `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 = InnoDBybIguB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
从节点刷新查看
项目代码
复用之前的 user
表操作代码即可
读写分离配置
application.yml
# 主从配置 读写分离 server: port: 8081 spring: main: # 一个实体类对应两张表,覆盖 allow-bean-definition-overjsriding: true shardingsphere: datasource: names: m1,s1 # 主库 从库 m1: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://192.168.40.128:3306/db_demo?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC username: root password: Root@123456 s1: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://192.168.4http://www.chinasem.cn0.129:3306/db_demo?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC username: root password: Root@123456 sharding: tables: user: # 分表策略 固定分配到主库的user表 即 m1.user actual-data-nodes: m1.user # 主库从库规则定义 master-slave-rules: m1: # 主库 master-data-source-name: m1 # 从库 slave-data-source-names: s1 props: # 打印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.setCandroidlientId(10000); user.setAge(18 + i); userMapper.insert(user); } }
- 运行结果
操作的必须是主库 对应的数据源 m1
主库查看
从库查看
更新测试修改前
- 测试类代码
修改 id=5 的记录的 name, user_5
=> Tom
@Test void 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主从集群的正确性
- 新增、更新、删除 都 操作主库 且 同步到从库
- 查询 只能操作 从库
这篇关于ShardingSphere之读写分离方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!