# sharding
**Repository Path**: lisy/sharding
## Basic Information
- **Project Name**: sharding
- **Description**: 读写分离测试(sharding)
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-01-12
- **Last Updated**: 2022-05-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 读写分离相关
## 一、数据库sql
```sql
CREATE TABLE `user` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`age` int DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
```
```sql
CREATE TABLE `user_info` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`user_id` int NOT NULL DEFAULT '0',
`msg1` varchar(255) DEFAULT NULL,
`msg2` varchar(255) DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
```
## 二、说明
pom
```
org.springframework.boot
spring-boot-starter-aop
org.apache.shardingsphere
sharding-jdbc-spring-boot-starter
4.1.1
org.apache.shardingsphere
sharding-jdbc-spring-namespace
4.1.1
```
application.yml(一主一从)
```
server:
port: 22483
spring:
shardingsphere:
datasource:
master:
driver-class-name: com.mysql.cj.jdbc.Driver
password: dadfasdfas1234@NPW
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://192.168.6.216:33061/task?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8
username: testNew
names: master,slave0
slave0:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
password: dadfasdfas1234@NPW
url: jdbc:mysql://192.168.6.216:33062/task?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8
username: testNew
masterslave:
master-data-source-name: master
name: ms
slave-data-source-names: slave0
props:
sql:
show: true
```
`sharding-jdbc-core`可以实现代码层面的读写分离,插入和更新走主库,查询走从库。测试发现并没有像官方说的,同一个线程有插入语句后后面的查询走从库,官方有代码可以显示指定使用主库,把显示指定用主库的代码封装成了注解,在插入/更新立即查询的场景下使用该注解,保证数据一致性。示例代码参考`com.lisynet.tools.mytools.controller.UserController`
## 四、关于redis高可用
**搭建redis集群后,代码里面不要用线程池,否则程序还是会用旧的连接,导致连接异常**