【发布时间】:2021-01-06 11:24:37
【问题描述】:
我有一个我正在实现的 API,我有一个需要调用的昂贵函数。我想记住这个函数或使用键值缓存来查找以前的结果。我也会考虑使用Mutex 或类似的结构,但我想避免使用 Redis 或 Memcached 等外部结构。根据我的阅读,Mutex 的缓存性能很差。如何使用 HashMap 之类的键值存储或在 actix_web 异步路由中存储函数?现在,我正在尝试一个简单的HashMap,但我得到了这个错误:can't borrow data in an Arc as mutable。
async fn index(
kv: web::Data<HashMap<&str, i64>>,
) -> Result<HttpResponse> {
dbg!(kv);
kv.insert("four", 4);
Ok(HttpResponse::Ok().json(kv)
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
let tuples: Vec<(&str, i64)> = vec![("one", 1), ("two", 2), ("three", 3)];
let mut m = tuples.into_iter().collect::<HashMap<&str, i64>>();
let mut kv = web::Data::new(m);
// move is necessary to give closure below ownership of counter1
HttpServer::new(move || {
App::new()
.app_data(kv.clone())
.route("/", web::get().to(index))
})
.bind("127.0.0.1:8080")?
.run()
.await
}
【问题讨论】:
标签: rust rust-actix actix-web