tdm_server_rust/cache/
collect_list_cache.rs1use crate::{
10 app::AppState,
11 common::{page_bean::PageBean, result::ResultBody},
12 entity::manga::MangaListVo,
13 utils::fast_json,
14};
15use std::sync::Arc;
16
17pub struct CollectListPageCache;
19
20fn cache_ttl_secs() -> u64 {
22 std::env::var("COLLECT_LIST_CACHE_SECS")
23 .ok()
24 .and_then(|v| v.parse().ok())
25 .unwrap_or(60)
26}
27
28pub fn new_collect_list_page_cache() -> CollectListPageCache {
30 CollectListPageCache
31}
32
33pub fn collect_list_cache_key(member_id: i32, page: i32, page_size: i32) -> String {
35 format!("collect_list:{member_id}:{page}:{page_size}")
36}
37
38pub async fn get_collect_list_json_cached(state: &AppState, key: &str) -> Option<Arc<Vec<u8>>> {
40 state.redis.get_json_bytes(key).await
41}
42
43pub async fn set_collect_list_json_cached(
45 state: &AppState,
46 key: String,
47 page: PageBean<MangaListVo>,
48) {
49 let body = ResultBody::success_data(&page);
50 let json = match fast_json::to_vec(&body) {
51 Ok(bytes) => Arc::new(bytes),
52 Err(_) => return,
53 };
54 state
55 .redis
56 .set_json_bytes_ttl(&key, json.as_ref(), cache_ttl_secs())
57 .await;
58}
59
60pub async fn invalidate_collect_list(state: &AppState, member_id: i32) {
62 state
63 .redis
64 .del_json_pattern(&format!("collect_list:{member_id}:*"))
65 .await;
66}