6个版本 (1个稳定版)
新增 1.0.0 | 2024年8月8日 |
---|---|
0.12.0 | 2023年8月18日 |
0.11.0 | 2023年2月7日 |
0.10.5 | 2022年12月2日 |
0.9.0 | 2022年11月7日 |
#12 in #locking
17KB
353 行
logic-lock
在 sea-orm 上实现 MySQL 逻辑锁
锁定
Lock::build
接收一个键,任何所有连接,因此它可以是 sea-orm::DatabaseConnection
,一个 sea-orm::DatabaseTransaction
或另一个 Lock
本身,以及一个可选的超时时间,默认为 1 秒。
在发生错误的情况下,所有者连接将随数据库错误(如果有的话)一起返回,这样连接就不会自动丢弃。
Lock
本身充当连接,因此您可以在任何需要原始连接的地方使用它。
let lock = logic_lock::Lock::build("my_lock_key", conn, None).await.unwrap();
解锁
由于 MySQL 逻辑锁存在于会话中,而不是像表锁那样的事务中,因此未丢弃的锁将一直存在,直到连接结束。如果连接是连接池的一部分,这可能是一个非常长的时间。
要释放一个 Lock
,只需使用 Lock::release
方法。
在成功的情况下,它将返回原始连接;在错误的情况下,它将返回 Lock
本身以及数据库错误(如果有的话)。
let conn = lock.release().await.unwrap();
删除
删除已锁定的 Lock
将记录一个错误。
为了避免在恐慌中引发恐慌的情况,已选择不引发恐慌。
依赖关系
~4.5–6MB
~136K SLoC