当前位置: 首页 > news >正文

8 读写分离-实战

Sharding-JDBC读写分离则是根据SQL语义的分析,将读操作和写操作分别路由至主库与从库。它提供透明化读写分离,让使用方尽量像使用一个数据库一样使用主从数据库集群。
在这里插入图片描述

1.数据准备

为了实现Sharding-JDBC的读写分离,首先,要进行mysql的主从同步配置。在主服务器中的 test数据库 创建**商品表**:

CREATE TABLE `products` (`pid` bigint(32) NOT NULL AUTO_INCREMENT,`pname` varchar(50) DEFAULT NULL,`price` int(11) DEFAULT NULL,`flag` varchar(2) DEFAULT NULL,PRIMARY KEY (`pid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

主库新建表之后,从库会根据binlog日志,同步创建.
在这里插入图片描述

2.创建SpringBoot程序

引入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.simon</groupId><artifactId>shardingjdbc-write-read</artifactId><version>0.0.1-SNAPSHOT</version><name>shardingjdbc-write-read</name><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.3.7.RELEASE</spring-boot.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId><version>5.1.1</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.1</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.3.7.RELEASE</version><configuration><mainClass>com.simon.shardingjdbc.ShardingjdbcWriteReadApplication</mainClass></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build></project>

创建实体类

@TableName("products")
@Data
public class Products {@TableId(value = "pid",type = IdType.AUTO)private Long pid;private String pname;private int  price;private String flag;}

创建Mapper

@Mapper
public interface ProductsMapper extends BaseMapper<Products> {
}

3.配置读写分离

# 应用名称
spring.application.name=shardingjdbc-write-read# 打印SQl
spring.shardingsphere.props.sql-show=true# 定义读写分离的数据源
spring.shardingsphere.datasource.names = master,slave#数据源1
spring.shardingsphere.datasource.master.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.master.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.master.jdbc-url=jdbc:mysql://192.168.52.10:3306/test_rw?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.shardingsphere.datasource.master.username=root
spring.shardingsphere.datasource.master.password=QiDian@666#数据源2
spring.shardingsphere.datasource.slave.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.slave.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.slave.jdbc-url=jdbc:mysql://192.168.52.11:3306/test_rw?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.shardingsphere.datasource.slave.username=root
spring.shardingsphere.datasource.slave.password=QiDian@666#读写分离 主从关系
# 读写分离类型,如: StaticDynamic, ms1 包含了  m1 和 s1
spring.shardingsphere.rules.readwrite-splitting.data-sources.ms1.type=Static# 写数据源名称
spring.shardingsphere.rules.readwrite-splitting.data-sources.ms1.props.write-data-source-name=master# 读数据源名称,多个从数据源用逗号分隔
spring.shardingsphere.rules.readwrite-splitting.data-sources.ms1.props.read-data-source-names=slave

负载均衡相关配置

https://shardingsphere.apache.org/document/current/cn/dev-manual/readwrite-splitting/
# 负载均衡算法名称
spring.shardingsphere.rules.readwrite-splitting.data-sources.myds.load-balancer-name=alg_round# 负载均衡算法配置
# 负载均衡算法类型
spring.shardingsphere.rules.readwrite-splitting.load-balancers.alg_round.type=ROUND_ROBIN  # 轮询
spring.shardingsphere.rules.readwrite-splitting.load-balancers.alg_random.type=RANDOM      # 随机
spring.shardingsphere.rules.readwrite-splitting.load-balancers.alg_weight.type=WEIGHT      # 权重
spring.shardingsphere.rules.readwrite-splitting.load-balancers.alg_weight.props.slave1=1
spring.shardingsphere.rules.readwrite-splitting.load-balancers.alg_weight.props.slave2=2

4.读写分离测试

//插入测试
@Test
public void testInsert(){Products products = new Products();products.setPname("电视机");products.setPrice(100);products.setFlag("0");productsMapper.insert(products);
}
@Test
public void testSelect(){QueryWrapper<Products> queryWrapper = new QueryWrapper<>();queryWrapper.eq("pname","电视机");List<Products> products = productsMapper.selectList(queryWrapper);products.forEach(System.out::println);
}
http://www.dtcms.com/a/482487.html

相关文章:

  • 手机网站建设西安检查网站是否做301
  • 网站Favicon图标:小图标背后的大作用 引言
  • 什么是GEO生成式引擎优化?GEO科普:定义、原理与应用指南
  • 使用 Gensim 进行主题建模(LDA)与词向量训练(Word2Vec)的完整指南
  • 诺奖解码外周免疫耐受,泰克生物以抗体工具链加速机制研究突破
  • 虚幻引擎5 GAS开发俯视角RPG游戏 P05-07 广播效果资产标签
  • 南阳专业做网站抖音代运营平台
  • 网站公司怎么做的好天津海外seo
  • 二级网站建设方案模板做ppt的网站叫什么名字
  • Java优选算法——位运算
  • Linux编辑器vim
  • 大模型-去噪扩散概率模型(DDPM)采样算法详解
  • LeetCode 398:随机数索引
  • 通过公网STUN服务器实现UDP打洞
  • 手机怎样设计网站建设哪个网站有做兼职的
  • 分布式专题——44 ElasticSearch安装
  • Java HTTP编程深度解析:从基础到微服务通信的完整架构实践
  • 3dgs train.py详解
  • Ruby Socket 编程
  • 阿里云linux主机如何添加2个网站中山网站建设方案托管
  • React 状态管理中的循环更新陷阱与解决方案
  • 手机h5免费模板网站深圳网页设计培训要多久
  • 网站快速建设网络营销公司介绍
  • 唐山seo网站建设企业网站的建立如何带来询盘
  • 上海虹口网站建设重庆网站建设公司的网站
  • 自动化测试之 Cucumber 工具
  • 基于MATLAB的t-SNE算法多合成数据集降维可视化实现
  • SAP 关于工单的状态更改,这个要怎么查看呢?
  • 网站建设费用会计分录男女做暧暧视频免费网站
  • 如何高效编写MySQL数据导出与导入语句?