mirror of
https://github.com/neon-mmd/websurfx.git
synced 2024-11-25 15:38:21 -05:00
✨ Config option to customize the cache invalidation/expiry time (#403)
This commit is contained in:
parent
3c6632246e
commit
5a8d61f231
7
src/cache/cacher.rs
vendored
7
src/cache/cacher.rs
vendored
@ -79,7 +79,7 @@ impl Cacher for RedisCache {
|
|||||||
"Initialising redis cache. Listening to {}",
|
"Initialising redis cache. Listening to {}",
|
||||||
&config.redis_url
|
&config.redis_url
|
||||||
);
|
);
|
||||||
RedisCache::new(&config.redis_url, 5)
|
RedisCache::new(&config.redis_url, 5, config.cache_expiry_time)
|
||||||
.await
|
.await
|
||||||
.expect("Redis cache configured")
|
.expect("Redis cache configured")
|
||||||
}
|
}
|
||||||
@ -113,13 +113,12 @@ pub struct InMemoryCache {
|
|||||||
#[cfg(feature = "memory-cache")]
|
#[cfg(feature = "memory-cache")]
|
||||||
#[async_trait::async_trait]
|
#[async_trait::async_trait]
|
||||||
impl Cacher for InMemoryCache {
|
impl Cacher for InMemoryCache {
|
||||||
async fn build(_config: &Config) -> Self {
|
async fn build(config: &Config) -> Self {
|
||||||
log::info!("Initialising in-memory cache");
|
log::info!("Initialising in-memory cache");
|
||||||
|
|
||||||
InMemoryCache {
|
InMemoryCache {
|
||||||
cache: MokaCache::builder()
|
cache: MokaCache::builder()
|
||||||
.max_capacity(1000)
|
.time_to_live(Duration::from_secs(config.cache_expiry_time.into()))
|
||||||
.time_to_live(Duration::from_secs(60))
|
|
||||||
.build(),
|
.build(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
6
src/cache/redis_cacher.rs
vendored
6
src/cache/redis_cacher.rs
vendored
@ -18,6 +18,8 @@ pub struct RedisCache {
|
|||||||
pool_size: u8,
|
pool_size: u8,
|
||||||
/// It stores the index of which connection is being used at the moment.
|
/// It stores the index of which connection is being used at the moment.
|
||||||
current_connection: u8,
|
current_connection: u8,
|
||||||
|
/// It stores the max TTL for keys.
|
||||||
|
cache_ttl: u16,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl RedisCache {
|
impl RedisCache {
|
||||||
@ -36,6 +38,7 @@ impl RedisCache {
|
|||||||
pub async fn new(
|
pub async fn new(
|
||||||
redis_connection_url: &str,
|
redis_connection_url: &str,
|
||||||
pool_size: u8,
|
pool_size: u8,
|
||||||
|
cache_ttl: u16,
|
||||||
) -> Result<Self, Box<dyn std::error::Error>> {
|
) -> Result<Self, Box<dyn std::error::Error>> {
|
||||||
let client = Client::open(redis_connection_url)?;
|
let client = Client::open(redis_connection_url)?;
|
||||||
let mut tasks: Vec<_> = Vec::new();
|
let mut tasks: Vec<_> = Vec::new();
|
||||||
@ -48,6 +51,7 @@ impl RedisCache {
|
|||||||
connection_pool: try_join_all(tasks).await?,
|
connection_pool: try_join_all(tasks).await?,
|
||||||
pool_size,
|
pool_size,
|
||||||
current_connection: Default::default(),
|
current_connection: Default::default(),
|
||||||
|
cache_ttl,
|
||||||
};
|
};
|
||||||
Ok(redis_cache)
|
Ok(redis_cache)
|
||||||
}
|
}
|
||||||
@ -121,7 +125,7 @@ impl RedisCache {
|
|||||||
|
|
||||||
let mut result: Result<(), RedisError> = self.connection_pool
|
let mut result: Result<(), RedisError> = self.connection_pool
|
||||||
[self.current_connection as usize]
|
[self.current_connection as usize]
|
||||||
.set_ex(key, json_results, 600)
|
.set_ex(key, json_results, self.cache_ttl.into())
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
// Code to check whether the current connection being used is dropped with connection error
|
// Code to check whether the current connection being used is dropped with connection error
|
||||||
|
@ -21,6 +21,9 @@ pub struct Config {
|
|||||||
/// It stores the redis connection url address on which the redis
|
/// It stores the redis connection url address on which the redis
|
||||||
/// client should connect.
|
/// client should connect.
|
||||||
pub redis_url: String,
|
pub redis_url: String,
|
||||||
|
#[cfg(any(feature = "redis-cache", feature = "memory-cache"))]
|
||||||
|
/// It stores the max TTL for search results in cache.
|
||||||
|
pub cache_expiry_time: u16,
|
||||||
/// It stores the option to whether enable or disable production use.
|
/// It stores the option to whether enable or disable production use.
|
||||||
pub aggregator: AggregatorConfig,
|
pub aggregator: AggregatorConfig,
|
||||||
/// It stores the option to whether enable or disable logs.
|
/// It stores the option to whether enable or disable logs.
|
||||||
@ -93,6 +96,19 @@ impl Config {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#[cfg(any(feature = "redis-cache", feature = "memory-cache"))]
|
||||||
|
let parsed_cet = globals.get::<_, u16>("cache_expiry_time")?;
|
||||||
|
let cache_expiry_time = match parsed_cet {
|
||||||
|
0..=59 => {
|
||||||
|
log::error!(
|
||||||
|
"Config Error: The value of `cache_expiry_time` must be greater than 60"
|
||||||
|
);
|
||||||
|
log::error!("Falling back to using the value `60` for the option");
|
||||||
|
60
|
||||||
|
}
|
||||||
|
_ => parsed_cet,
|
||||||
|
};
|
||||||
|
|
||||||
Ok(Config {
|
Ok(Config {
|
||||||
port: globals.get::<_, u16>("port")?,
|
port: globals.get::<_, u16>("port")?,
|
||||||
binding_ip: globals.get::<_, String>("binding_ip")?,
|
binding_ip: globals.get::<_, String>("binding_ip")?,
|
||||||
@ -116,6 +132,8 @@ impl Config {
|
|||||||
time_limit: rate_limiter["time_limit"],
|
time_limit: rate_limiter["time_limit"],
|
||||||
},
|
},
|
||||||
safe_search,
|
safe_search,
|
||||||
|
#[cfg(any(feature = "redis-cache", feature = "memory-cache"))]
|
||||||
|
cache_expiry_time,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -47,7 +47,7 @@ theme = "simple" -- the theme name which should be used for the website
|
|||||||
|
|
||||||
-- ### Caching ###
|
-- ### Caching ###
|
||||||
redis_url = "redis://127.0.0.1:8082" -- redis connection url address on which the client should connect on.
|
redis_url = "redis://127.0.0.1:8082" -- redis connection url address on which the client should connect on.
|
||||||
|
cache_expiry_time = 600 -- This option takes the expiry time of the search results (value in seconds and the value should be greater than or equal to 60 seconds).
|
||||||
-- ### Search Engines ###
|
-- ### Search Engines ###
|
||||||
upstream_search_engines = {
|
upstream_search_engines = {
|
||||||
DuckDuckGo = true,
|
DuckDuckGo = true,
|
||||||
|
Loading…
Reference in New Issue
Block a user