ShardingSphere实战(5)- 读写分离

news2024/12/24 8:40:24

上篇博客,我们讲了 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=xxx

spring.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=xxx

spring.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=true

mybatis.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.coloradmin.cn/o/1972933.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++标准模版库】vector的介绍及使用

vector 一.vector的介绍二.vector的使用1.vector 构造函数2.vector 空间增长3.vector 增删查改4.vector 迭代器的使用1.正向迭代器2.反向迭代器 5.victor 迭代器失效问题&#xff08;重点&#xff09; 三.vector不支持 流提取与流插入四.vector存储自定义类型1.存储string2.存储…

OS_操作系统的运行环境

2024.06.11:操作系统的运行环境学习笔记 第3节 操作系统的运行环境 3.1 操作系统引导3.2 操作系统内核3.2.1 内核资源管理3.2.2 内核基本功能 3.3 CPU的双重工作模式3.3.1 CPU处于用户态&#xff08;目态&#xff09;3.3.2 CPU处于内核态&#xff08;管态&#xff09; 3.4 特权…

【mars3d】创建一个全黑的地球,太空背景色随意

关键参数&#xff1a; 1.backgroundColor 2.baseColor 3.basemaps 在basemaps没有底图的时候&#xff0c;可以直接设置地球的背景色baseColor 与此同时需要注意&#xff0c;不要showSkyBox等天空盒效果&#xff0c;不然容易看不见球在哪里&#xff0c;不好操作 链接&…

一种用于用于图像超分辨率的高效退化模型

一种用于用于图像超分辨率的高效退化模型 摘要引言退化模型设计图像降质模型简化版3.1. 模糊3.2. 下采样3.3. 噪声3.4. 随机排序 实验结果结论参考文献 摘要 为了增加数原始图像的退化丰富度&#xff0c;提高超分辨率网络的泛化能力&#xff0c;本文介绍了一种更加复杂但实用的…

秒懂C++之vector(下)

目录 前言 一.vector容器的模拟实现 1.1 基本配置 1.2 reserve 扩容 1.3 push_back 尾插 1.4 insert 插入 1.5 【】运算符 1.6 拷贝构造 1.7 运算符 1.8 resize 扩容初始化 1.9 erase 删除 1.10 迭代器构造 二.例题练习 17. 电话号码的字母组合 题目解析&#x…

pytorch学习笔记3 tensor索引和切片

dim 0 占先 切片 &#xff08;前N或者后N个&#xff09; &#xff1a;2 表示 0到2&#xff08;不包含2&#xff09;&#xff0c; 1&#xff1a;表示 1到末尾&#xff0c; -1表示最后一个元素&#xff0c;-2表示倒数第二个 0:28:2 表示从0到27隔点采样 &#xff1a;&#xff…

【反序列化漏洞】serial靶机详解

一、安装靶机 首先创建新的虚拟机。 然后选择客户机版本为Ubuntu 64位。 然后选择使用现有磁盘&#xff0c;选择下载的vmdk磁盘文件即可。剩下的都是默认 二、信息收集 发现主机192.168.204.143 访问 扫描端口nmap -A 192.168.204.143 -p-&#xff0c;发现只有ssh:22和http:8…

科普文:微服务之分布式链路追踪SkyWalking单点服务搭建

1. 概述 1.1 概念 SkyWalking 是什么&#xff1f; SkyWalking 极简入门 | Apache SkyWalking FROM Apache SkyWalking 分布式系统的应用程序性能监视工具&#xff0c;专为微服务、云原生架构和基于容器&#xff08;Docker、K8s、Mesos&#xff09;架构而设计。 提供分布式追…

【Bugku】Web系列第二更~

1.你必须让他停下 查看源代码&#xff0c;一直刷新&#xff0c;直到看见flag 2.矛盾 构造一个?num1[字母&#xff0c;随便写到最后都会被PHP转化成0] 这里利用的是PHP对数字和字符串比较的时候的一个特性&#xff0c;他会试图把字符串转化为数字&#xff0c;所以1XXX转化到最后…

学习笔记 - 二极管的参数与选型

二极管 普通二极管&#xff1a; 1N4148(高频开关二极管) 整流二极管&#xff1a; 1N4007 1A 1000V1N5408 3A 1000V 肖特基二极管 &#xff08;白线边为阴极&#xff09; SS14 SS34 SS54 常见肖特基二极管参数 快恢复二极管 FR107 FR207 FR307 UF4007 可以用快恢复二…

Golang | Leetcode Golang题解之第315题计算右侧小于当前元素的个数

题目&#xff1a; 题解&#xff1a; var a, c []intfunc countSmaller(nums []int) []int {resultList : []int{}discretization(nums)c make([]int, len(nums) 5)for i : len(nums) - 1; i > 0; i-- {id : getId(nums[i])resultList append(resultList, query(id - 1))…

前端开源插件

Luckysheet&#xff1a;类似Excel&#xff0c;在线电子表格工具 源码地址 https://github.com/dream-num/Luckysheet Luckysheet 已不再维护&#xff0c;推荐使用 Univer 替代 | Luckysheet文档Luckysheet &#xff0c;一款纯前端类似excel的在线表格&#xff0c;功能强大、…

Java重修笔记 第二十七天 匿名内部类

匿名内部类 1. 定义&#xff1a;无类名&#xff08;底层自动分配类名“外部类名$1”&#xff09;&#xff0c;既是类也是对象&#xff0c;定义在外部类的局部位置&#xff0c;例如方法体和代码块中&#xff0c;通过new类或接口并在大括号里重写方法来实现。 2. 使用场景&…

自定义监控

代码说明&#xff1a; 导入必要的库 import time import psutil import GPUtil from prometheus_client import start_http_server, Summary, Counter, Gaugepsutil&#xff1a;用于获取系统的CPU、内存、磁盘和网络信息。GPUtil&#xff1a;用于获取GPU信息。prometheus_cli…

git拉完代码总是自动创建一个新的节点

git拉完代码&#xff0c;总是自动生成弹出这个信息 然后还会在git上面留下一个节点&#xff0c;这个节点没啥用&#xff0c;显示着感觉有点碍事。 而且后续的git push 之后&#xff0c;会覆盖掉自己的git commit 的提示&#xff0c;其他人cr代码的时候看到的是 解决方法&#…

【深度学习】【语音TTS】OpenVoice v2,测评,中英文语料,Docker镜像,对比GPT-SoVITS、FishAudio、BertVITS2

https://github.com/myshell-ai/OpenVoice/blob/main/docs/USAGE.md 实际体验OpenVoice v2的TTS效果。 文章目录 环境启动 jupyter代码代码分析主要模块和功能测试一些别的中文和中英文混合总结优点缺点对比GPT-SoVITS、FishAudio、BertVITS2使用我的Docker镜像快速体验OpenVo…

uni-app封装组件实现下方滑动弹出模态框

子组件 <template><div class"bottom-modal" :class"{show: showModal}"><div class"modal-content" :class"{show: showModal}"><!-- 内容区域 --><slot></slot></div></div></…

收银系统源码-分销商城视频介绍

系统介绍 专门为零售行业的连锁店量身打造的收银系统&#xff0c;适用于常规超市、生鲜超市、水果店、便利店、零食专卖店、服装店、母婴用品、农贸市场等类型的门店使用。同时线上线下数据打通&#xff0c;线下收银的数据与小程序私域商城中的数据完全同步&#xff0c;如商品…

欧科云链7月安全月报 | 私钥泄露损失约占总损失88%,超2.6亿美元

7 月全网累计造成损失约 2.9 亿美元&#xff0c;因私钥泄露所造成损失占总损失的 88.31%&#xff0c;其中 WazirX 因多签钱包私钥泄露&#xff0c;造成约 2.35 亿美元的损失&#xff0c;为 7 月最大安全事件。 最大安全事件-私钥泄漏 7 月 18 日&#xff0c;WazirX 多签钱包私…

Spring Boot集成Resilience4J实现断路器功能

1.什么是Resilience4J&#xff1f; Netflix Hystrix 断路器是 Spring Cloud 中最早就开始支持的一种服务调用容错解决方案&#xff0c;但是目前的 Hystrix 已经处于维护模式了&#xff0c;虽然这并不影响已经上线的项目&#xff0c;并且在短期内&#xff0c;你甚至也可以继续在…