0
0
mirror of https://github.com/neon-mmd/websurfx.git synced 2024-11-22 05:58:21 -05:00

⚙️ refactor: add code to initialize redis cache struct only once (#180)(#178)

This commit is contained in:
neon_arch 2023-08-29 20:15:06 +03:00
parent 7b1f93b232
commit 4c298ce18c

View File

@ -16,6 +16,10 @@ use handlebars::Handlebars;
use serde::Deserialize; use serde::Deserialize;
use tokio::join; use tokio::join;
// ---- Constants ----
/// Initialize redis cache connection once and store it on the heap.
const REDIS_CACHE: async_once_cell::OnceCell<RedisCache> = async_once_cell::OnceCell::new();
/// A named struct which deserializes all the user provided search parameters and stores them. /// A named struct which deserializes all the user provided search parameters and stores them.
/// ///
/// # Fields /// # Fields
@ -158,10 +162,17 @@ async fn results(
page: u32, page: u32,
req: &HttpRequest, req: &HttpRequest,
) -> Result<SearchResults, Box<dyn std::error::Error>> { ) -> Result<SearchResults, Box<dyn std::error::Error>> {
//Initialize redis cache connection struct let redis_cache: RedisCache = REDIS_CACHE
let mut redis_cache = RedisCache::new(&config.redis_url, 5).await?; .get_or_init(async {
// Initialize redis cache connection pool only one and store it in the heap.
RedisCache::new(&config.redis_url, 5).await.unwrap()
})
.await
.clone();
// fetch the cached results json. // fetch the cached results json.
let cached_results_json = redis_cache.cached_json(&url).await; let cached_results_json: Result<String, error_stack::Report<crate::cache::error::PoolError>> =
redis_cache.clone().cached_json(&url).await;
// check if fetched cache results was indeed fetched or it was an error and if so // check if fetched cache results was indeed fetched or it was an error and if so
// handle the data accordingly. // handle the data accordingly.
match cached_results_json { match cached_results_json {
@ -205,6 +216,7 @@ async fn results(
}; };
results.add_style(&config.style); results.add_style(&config.style);
redis_cache redis_cache
.clone()
.cache_results(&serde_json::to_string(&results)?, &url) .cache_results(&serde_json::to_string(&results)?, &url)
.await?; .await?;
Ok(results) Ok(results)