jaemk / cached

Rust cache structures and easy function memoization

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Update cached value asynchronously, outside the thread that returns the return value of the function

kpears201 opened this issue · comments

If I have a function like:

#[cached(
    key = "String",
    time = 3600,
    convert = r#"{ id }"#,
    result = true,
)]
async fn get_item(id: String) -> Result<String> {
   long_network_call().await
}

If get_item is called and there is a cached value but TTL has expired. I would still like the stale cached value to be returned immediately and then long_network_call is called in another thread to update the cached value, such that the NEXT call will get the fresh value.

This is important for making sure long_network_call stays off the critical path and doesn't affect performance of anything that needs get_item.
It also adds a way to use stale data if long_network_call fails. Following the idea that in many cases stale data is better than no data. I didn't see a way to do that either in this library.

Not sure I could think of a good config parameter name...
Maybe stale_immediately=true or refresh_async=true