gpt4 book ai didi

mysql - 发送写入到 mysql master 并以 slick 方式读取到 slave

转载 作者:可可西里 更新时间:2023-11-01 07:03:32 24 4
gpt4 key购买 nike

使用 Slick 和 MySQL 设置的主/从,我如何确保写入(INSERTUPDATE 等)发送到 master 并读取(SELECT) 被发送到奴隶?

最佳答案

根据MySQL关于这个的文档,我们需要设置 Connection#setReadOnly(true|false)

在 slick 中执行此操作的一个好方法是将以下函数添加到您的数据库代码中:

/**
* Runs a block of read only database code. No transaction required.
*/
def readOnly[T](f: => T) = db withSession {
Database.threadLocalSession.conn.setReadOnly(true)
f
}

/**
* Runs a block of read/write database code in a transaction.
* Any exceptions will rollback any writes.
*/
def readWrite[T](f: => T) = db withTransaction {
Database.threadLocalSession.conn.setReadOnly(false)
f
}

然后你可以这样写查询:

/**
* Goes to slave
*/
def findUser(id: String) = readOnly {
sql"SELECT ... FROM user WHERE id = $id".as[User].firstOption
}

/**
* Goes to master
*/
def createUser(id: String) = readWrite {
sqlu"INSERT INTO user VALUES(...)".execute
}

关于mysql - 发送写入到 mysql master 并以 slick 方式读取到 slave,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19378293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com