Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
kpears201 opened this issue Feb 22, 2023 · 1 comment

Comments

@kpears201
Copy link

kpears201 commented Feb 22, 2023

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

@obj-obj
Copy link

obj-obj commented Jun 28, 2023

Yeah, this would be useful for me as well

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants