瑞吉外卖读写分离
主库增删改,从库做查询。
有效避免数据更新导致的行锁。
select * from user where id=1 slave
update user set status=?where id=1 master
怎么判断是查询还是更新
使用框架
sharding-jdbc
客户端直连数据库,jar包提供服务,使用maven
sharding-jdbc-spring-boot-starter
入门案例
1 依赖引入
2 数据源 配置文件
masterslave:
3 配置文件中配置允许bean定义覆盖配置项
两个配置类都想创建数据源对象,发生冲突。
依赖
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>4.0.0-RC1</version>
</dependency>
shardingsphere :
datasource :
names :
master, slave
master :
type : com.alibaba.druid.pool.DruidDataSource
driver-class-name : com.mysql.cj.jdbc.Driver
url : jdbc: mysql: //192.168.138.100: 3306/reggie? characterEncoding=utf- 8
username : root
password : root
slave :
type : com.alibaba.druid.pool.DruidDataSource
driver-class-name : com.mysql.cj.jdbc.Driver
url : jdbc: mysql: //192.168.138.101: 3306/reggie? characterEncoding=utf- 8
username : root
password : root
masterslave :
load-balance-algorithm-type : round_robin
name : dataSource
master-data-source-name : master
slave-data-source-names : slave
props :
sql :
show : true
main :
allow-bean-definition-overriding : true
项目实现读写分离
1 数据库环境准备
2 代码改造
优化需要创建新分支v1.1
3 功能测试
推送代码
将推送后内容合并到主分支
新分支checkout--》主分支merge