1

我使用 MySQL 作为我的数据库,并使用柴油来检索数据。数据每秒从多个端点更新。问题是在使用柴油检索数据时,我得到的结果已经过时(可能是由于柴油端的缓存)。MySQL 使用 运行SET GLOBAL query_cache_size = 0,因此数据库服务器端没有活动缓存。

这是我检索数据的代码部分:

pub struct Weather {
    pub id: u32,
    pub temperature: f32,
    pub datetime: NaiveDateTime,
}

pub fn {
    let timewindow = ... // A timewindow I set
    let results = weather.filter(datetime.ge(timewindow)).load::<Weather>(&db).unwrap();
    println("{:?}", results)
}

你知道我怎样才能停用柴油机上的缓存吗?

4

1 回答 1

0

Diesel 减少了数据库交互的样板文件,并且是在 Rust 中与数据库交互的最有效方式,因为它对查询具有安全和可组合的抽象。Diesel 提供了一个高级查询构建器,基本上 Diesel 在抽象时导致零开销,并尝试运行查询和加载数据甚至比在 C 中更快。没有缓存可以导致这种过时的结果,而且它也不支持 SQL_NO_CACHE选项相关查询。过时的结果似乎与其他多个点有关,例如使用的查询或系统设置/设计,在其他评论中也进行了更新。

但是,如果您使用准备好的语句,它们可以在重复使用您准备的相同语句时提高性能(语句将被缓存以供将来调用 prepare_cached 重用)。在这种情况下,您还可以设置特定连接将保存的缓存准备语句的最大数量,因为在这种情况下,默认情况下,连接将保存相对较少数量的缓存语句。

于 2022-01-16T13:55:32.087 回答