pub struct IoReuseChannel { /* private fields */ }Expand description
连接池 IO 复用通道
在连接上复用 prepared statement 通道,减少重复 prepare 开销。 首次执行 SQL 时 prepare 并缓存句柄,后续执行直接复用缓存句柄。
需启用 pool-io-reuse feature。
Implementations§
Source§impl IoReuseChannel
impl IoReuseChannel
Sourcepub fn new(max_size_per_conn: usize) -> Self
pub fn new(max_size_per_conn: usize) -> Self
创建 IO 复用通道,内部持有 PreparedStatementCache
max_size_per_conn 为每连接最大缓存句柄数(默认 256)
Sourcepub async fn execute_reuse(
&self,
conn_id: ConnId,
sql: &str,
params: &[Value],
tables: Vec<String>,
prepare_fn: impl FnOnce() -> ExecuteFn,
) -> Result<QueryRows, DbError>
pub async fn execute_reuse( &self, conn_id: ConnId, sql: &str, params: &[Value], tables: Vec<String>, prepare_fn: impl FnOnce() -> ExecuteFn, ) -> Result<QueryRows, DbError>
复用 prepared statement 通道执行查询
流程:
- 查找缓存句柄 → 命中则直接执行返回
- 未命中 → 调用
prepare_fn获取执行闭包 → 缓存 → 执行返回
§参数
conn_id: 连接唯一标识sql: SQL 文本params: 参数列表tables: 涉及的表名列表(用于表级失效索引)prepare_fn: 首次执行时的 prepare 闭包,返回执行函数
Sourcepub fn stats(&self) -> PreparedStatementCacheStatsSnapshot
pub fn stats(&self) -> PreparedStatementCacheStatsSnapshot
返回缓存统计快照
Sourcepub fn invalidate_conn(&self, conn_id: ConnId)
pub fn invalidate_conn(&self, conn_id: ConnId)
失效连接级缓存(连接关闭时调用)
Sourcepub fn invalidate_table(&self, table: &str)
pub fn invalidate_table(&self, table: &str)
失效表级缓存(表结构变更时调用)
Auto Trait Implementations§
impl !Freeze for IoReuseChannel
impl !RefUnwindSafe for IoReuseChannel
impl !UnwindSafe for IoReuseChannel
impl Send for IoReuseChannel
impl Sync for IoReuseChannel
impl Unpin for IoReuseChannel
impl UnsafeUnpin for IoReuseChannel
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more