springboot中如何配置读写分离:首先配置“spring.data.mongodb.uri”; 然后创建一个Rest风格的“IndexController”; 最后验证读写分离是否生效。
mongoDB的读写分离
1. ReadPreference阅读偏好
ReadPreference的设置只涉及副本集中。 默认情况下,读写都是由Primary节点分发执行的。 但是,在写少读多的情况下,我们希望将读和写分开来平均分配压力,所以我们希望用 secondary 节点进行读,primary 只承担写的责任(其实就是写)只能分发到主节点,不能更改)。
MongoDB 有 5 种 ReadPreference 模式:
Primary:主节点php 读写分离,默认模式,读操作仅在主节点上。 如果主节点不可用php 读写分离,则会报错或者抛出异常。
PrimaryPreferred:优先选择主节点。 大多数情况下,读操作是在主节点上执行的。 如果主节点不可用,例如故障转移,则在从节点上执行读操作。
secondary:从节点。 读操作仅在从节点上执行。 如果从节点不可用,则会报错或者抛出异常。
secondaryPreferred:优先选择从节点。 大多数情况下,读操作是在从节点上进行的。 在特殊情况下(例如单主节点架构),读操作在主节点上。
nearest:最邻近的节点,读操作是在最邻近的成员上,可能是主节点,也可能是从节点。
在 Spring 中设置 ReadPreference:
登录后复制
2、springboot中配置读写分离
让我重申一下,ReadPreference 的设置仅在副本集中有意义。
请特别注意spring.data.mongodb.uri的配置。 其格式如下。 mongodb连接可以参考:
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
登录后复制
例子:
# MongoDB URI配置 重要,添加了用户名和密码验证 spring.data.mongodb.uri=mongodb://zhuyu:zhuyu@192.168.68.138:27017,192.168.68.137:27017,192.168.68.139:27017/ai?slaveOk=true&replicaSet=zypcy&write=1&readPreference=secondaryPreferred&connectTimeoutMS=300000 #每个主机的连接数 spring.data.mongodb.connections-per-host=50 #线程队列数,它以上面connectionsPerHost值相乘的结果就是线程队列最大值 spring.data.mongodb.threads-allowed-to-block-for-connection-multiplier=50 spring.data.mongodb.connect-timeout=5000 spring.data.mongodb.socket-timeout=3000 spring.data.mongodb.max-wait-time=1500 #控制是否在一个连接时,系统会自动重试 spring.data.mongodb.auto-connect-retry=true spring.data.mongodb.socket-keep-alive=true
登录后复制
验证读写分离是否生效:
创建一个Rest风格的IndexController,提供:添加和查询socket,访问这两个socket,观察控制台输出,查询操作是否手动分配给从库,写操作分配给主库
@RequestMapping("/index") @RestController public class IndexController { @Autowired private MongoTemplate mongoTemplate; @RequestMapping("/getList") public List getList(){ List list = mongoTemplate.findAll(TestModel.class,"test"); return list; } @RequestMapping("/add") public String add(){ TestModel model = new TestModel("zhuyu" + System.currentTimeMillis()); mongoTemplate.insert(model , "test"); return "success"; } }
登录后复制