ShardingSphere之读写分离方式

 更新时间:2025年05月28日 12:21:44   作者:菜逼の世界  
这篇文章主要介绍了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: 8081

spring:
  main:
    # 一个实体类对应两张表,覆盖
    allow-bean-definition-overriding: 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.40.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.setClientId(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主从集群的正确性
  • 新增、更新、删除 都 操作主库 且 同步到从库
  • 查询 只能操作 从库

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 快速排序算法在Java中的实现

    快速排序算法在Java中的实现

    这篇文章主要介绍了快速排序算法在Java中的实现,简单介绍了快速排序的实现原理,分享了两种实现代码,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • 详解IntelliJ IDEA 快捷键整合(大全)

    详解IntelliJ IDEA 快捷键整合(大全)

    这篇文章主要介绍了详解IntelliJ IDEA 快捷键整合,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-08-08
  • java线性表排序示例分享

    java线性表排序示例分享

    这篇文章主要介绍了java线性表排序示例,需要的朋友可以参考下
    2014-03-03
  • 利用Java搭建个简单的Netty通信实例教程

    利用Java搭建个简单的Netty通信实例教程

    这篇文章主要给大家介绍了关于如何利用Java搭建个简单的Netty通信,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-05-05
  • 如何配置cursor进行Java springboot项目开发

    如何配置cursor进行Java springboot项目开发

    本文介绍了如何在Cursor IDE中配置Java和Spring Boot项目开发环境,首先,设置了系统用户级别的JDK配置,以便在多个项目之间切换时不需要重新配置,然后,配置了Gradle环境变量,并安装了必要的Java开发插件,感兴趣的朋友跟随小编一起看看
    2025-02-02
  • springboot加载复杂的yml文件获取不到值的解决方案

    springboot加载复杂的yml文件获取不到值的解决方案

    这篇文章主要介绍了springboot加载复杂的yml文件获取不到值的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java工厂模式用法之如何动态选择对象详解

    Java工厂模式用法之如何动态选择对象详解

    工厂设计模式可能是最常用的设计模式之一,我想大家在自己的项目中都用到过。本文不仅仅是关于工厂模式的基本知识,更是讨论如何在运行时动态选择不同的方法进行执行,你们可以看看是不是和你们项目中用的一样
    2023-03-03
  • 轻松掌握Java建造者模式

    轻松掌握Java建造者模式

    这篇文章主要帮助大家轻松掌握Java建造者模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • Java虚拟机JVM性能优化(二):编译器

    Java虚拟机JVM性能优化(二):编译器

    这篇文章主要介绍了Java虚拟机JVM性能优化(二):编译器,本文先是讲解了不同种类的编译器,并对客户端编译,服务器端编译器和多层编译的运行性能进行了对比,然后给出了几种常见的JVM优化方法,需要的朋友可以参考下
    2014-09-09
  • Java常用字节流和字符流实例汇总

    Java常用字节流和字符流实例汇总

    这篇文章主要介绍了Java常用字节流和字符流实例汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07

最新评论