php 读写分离-springboot中如何配置读写分离

2023-09-05 0 280 百度已收录

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";
    }
}

登录后复制

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 php php 读写分离-springboot中如何配置读写分离 https://www.wkzy.net/game/194496.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务