ShardingSphere之读写分离方式

2025-05-29 03:50

本文主要是介绍ShardingSphere之读写分离方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《ShardingSphere之读写分离方式》:本文主要介绍ShardingSphere之读写分离方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教...

ShardingSphere-读写分离

读写分离

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

MySQL主从集群

节点角色主机地址端口用户名密码库名
master192.168.40.1283306rootRoot@123456db_demo
slave192.168.40.1293306rootRoot@123456db_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;

ShardingSphere之读写分离方式

从节点刷新查看

ShardingSphere之读写分离方式

项目代码

复用之前的 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


ShardingSphere之读写分离方式

主库查看

ShardingSphere之读写分离方式

从库查看

ShardingSphere之读写分离方式

更新测试修改前

ShardingSphere之读写分离方式

  • 测试类代码

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

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

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

ShardingSphere之读写分离方式

查看主库

ShardingSphere之读写分离方式

查看从库

ShardingSphere之读写分离方式

删除测试

删除 id=5 的记录

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

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

ShardingSphere之读写分离方式

查看主库

ShardingSphere之读写分离方式

查看从库

ShardingSphere之读写分离方式

查询测试

指定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

ShardingSphere之读写分离方式

总结

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持China编程(www.chinasem.cn)。

这篇关于ShardingSphere之读写分离方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1154836

相关文章

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

Linux在线解压jar包的实现方式

《Linux在线解压jar包的实现方式》:本文主要介绍Linux在线解压jar包的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux在线解压jar包解压 jar包的步骤总结Linux在线解压jar包在 Centos 中解压 jar 包可以使用 u

Jenkins分布式集群配置方式

《Jenkins分布式集群配置方式》:本文主要介绍Jenkins分布式集群配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装jenkins2.配置集群总结Jenkins是一个开源项目,它提供了一个容易使用的持续集成系统,并且提供了大量的plugin满

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

C#读写文本文件的多种方式详解

《C#读写文本文件的多种方式详解》这篇文章主要为大家详细介绍了C#中各种常用的文件读写方式,包括文本文件,二进制文件、CSV文件、JSON文件等,有需要的小伙伴可以参考一下... 目录一、文本文件读写1. 使用 File 类的静态方法2. 使用 StreamReader 和 StreamWriter二、二进

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

java实现docker镜像上传到harbor仓库的方式

《java实现docker镜像上传到harbor仓库的方式》:本文主要介绍java实现docker镜像上传到harbor仓库的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 前 言2. 编写工具类2.1 引入依赖包2.2 使用当前服务器的docker环境推送镜像2.2

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文