ShardingSphere实战(5)- 读写分离

devtools/2024/9/24 17:17:15/

上篇博客,我们讲了 ShardingSphere实战(4)- 广播表和默认数据源 ,这篇博客,我们实现一下读写分离

一、读写分离配置

# sharding-jdbc 读写分离策略
# 给数据源起别名,这里名称需要和下面的一致
spring.shardingsphere.datasource.names=master,slave0,slave1# 配置数据源
spring.shardingsphere.datasource.master.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.master.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.master.jdbc-url=jdbc:mysql://xxx:3316/master?serverTimezone=UTC&useSSL=false
spring.shardingsphere.datasource.master.username=xxx
spring.shardingsphere.datasource.master.password=xxxspring.shardingsphere.datasource.slave0.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.slave0.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.slave0.jdbc-url=jdbc:mysql://xxx:3316/slave0?serverTimezone=UTC&useSSL=false
spring.shardingsphere.datasource.slave0.username=xxx
spring.shardingsphere.datasource.slave0.password=xxxspring.shardingsphere.datasource.slave1.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.slave1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.slave1.jdbc-url=jdbc:mysql://xxx/slave1?serverTimezone=UTC&useSSL=false
spring.shardingsphere.datasource.slave1.username=xxx
spring.shardingsphere.datasource.slave1.password=xxx# 负载均衡策略(轮询)
spring.shardingsphere.masterslave.load-balance-algorithm-type=round_robin# 读写分离规则名称
spring.shardingsphere.masterslave.name=ms
spring.shardingsphere.masterslave.master-data-source-name=master
spring.shardingsphere.masterslave.slave-data-source-names=slave0,slave1# 是否开启 SQL解析日志
spring.shardingsphere.props.sql.show=truemybatis.mapper-locations=classpath:sqlmapper/*.xml

二、创建数据库

create database master;
create database slave0;
create database slave1;create table `master`.t_user (user_id bigint not null,user_name varchar(50) null,primary key (user_id)
);
create table `slave0`.t_user (user_id bigint not null,user_name varchar(50) null,primary key (user_id)
);
create table `slave1`.t_user (user_id bigint not null,user_name varchar(50) null,primary key (user_id)
);

在这里插入图片描述
我们模拟一主两从的架构,ShardingSphere不支持数据同步,这里就不讲数据同步的方案了。

三、运行测试

1. 保存数据

/*** 读写分离测试-保存*/
@GetMapping("/test9")
public String test9(@RequestParam("count") Integer count) {for (int i = 0; i < count; i++) {UserDO userDO = new UserDO();userDO.setUserId(this.getId());userDO.setUserName("userName" + i);userMapper.insertSelective(userDO);}return "success";
}

测试结果:
在这里插入图片描述
写操作进入了master

2. 查询数据

/*** 读写分离测试-查询*/
@GetMapping("/test10")
public String test10(@RequestParam("userId") Long userId) {UserDO userDO = userMapper.selectByPrimaryKey(userId);log.info("userDO: {}", userDO.toString());return "success";
}

测试结果:
在这里插入图片描述
读操作进入了slave库,因为我们的 负载均衡策略round_robin,所以读请求轮询进入了 slave0slave0


总结:本篇博客实现了 读写分离,后续会陆续更新 数据分片 + 读写分离分布式事务


http://www.ppmy.cn/devtools/88860.html

相关文章

平衡二叉树 - 力扣(LeetCode) C语言

110. 平衡二叉树 - 力扣&#xff08;LeetCode&#xff09;&#xff08;点击前面链接即可查看题目&#xff09; 一、题目 给定一个二叉树&#xff0c;判断它是否是 平衡二叉树 是指该树所有节点的左右子树的深度相差不超过 1。 示例 1&#xff1a; 输入&#xff1a;root […

【Vulnhub靶场AI-WEB-1.0打靶教程】

第一步&#xff1a;查看虚拟机的ip 第二步&#xff1a;扫描ip下开放的80端口 第三步&#xff1a;扫描查到的ip地址下的目录 第四步&#xff1a;访问查到的目录 访问robot.txt 第五步:访问robot.txt显示出的目录 第六步&#xff1a;打开kali终端&#xff0c;使用sqlmap功能 sq…

IT求职与晋升——AIGC浪潮下如何脱颖而出?

文章目录 一、AIGC时代码农职场现状的深刻变革1. 技术革新带来的岗位变迁2. 人才需求结构的调整3. 职场竞争的加剧 二、AIGC时代码农求职策略的全面升级1. 精准定位职业方向2. 持续提升专业技能3. 积累项目经验和实战案例4. 建立良好的人际关系网络 三、AIGC时代码农技能需求的…

《Advanced RAG》-01-朴素RAG存在的问题

摘要 文章阐述了RAG技术如何通过整合外部知识源来提升大型语言模型&#xff08;LLM&#xff09;的性能&#xff0c;使其能够产生更精确、上下文感知的回应&#xff0c;并减少幻觉现象。 自2023年以来&#xff0c;RAG已成为基于LLM的系统中最流行的架构&#xff0c;许多产品依赖…

ajax图书管理项目

bootstrap弹框 不离开当前页面&#xff0c;显示单独内容&#xff0c;让用户操作 功能&#xff1a;不离开当前页面&#xff0c;显示单独内容&#xff0c;供用户操作步骤&#xff1a; 1.引入bootstrap.css和bootstrap.js …

SpringBoot异步线程父子线程数据传递的5种方式

SpringBoot异步线程父子线程数据传递的5种方式 1、ThreadLocalTaskDecorator package com.example.parentchildthreadspassingdata.threadLocal_taskDecorator;/*** author tom* 使用ThreadLocal存储共享的数据变量&#xff0c;如登录的用户信息*/ public class UserUtils {p…

深入理解计算机系统 CSAPP lab:Data Lab

实验资源下载地址&#xff1a;csapp.cs.cmu.edu/3e/labs.html 使用前先详细阅读资源内的readme 你可能用到的命令&#xff1a; su root 获取最高权限 apt install gcc-multilib 项目是32位的要安装这个才能运行 第一题&#xff1a; int bitXor(int x, int y) {return (~(…

[C++] 容器适配器:深入理解Stack与Queue的底层原理

文章目录 容器适配器简介deque的缺陷为什么使用deque作为stack和queue的底层默认容器 stack和queue的简单讲解Stack&#xff08;栈&#xff09;栈的操作图示栈的相关接口 Queue&#xff08;队列&#xff09; Stack和Queue的模拟实现Stack&#xff08;栈&#xff09;作为容器适配…