tdm_server_rust/cache/
member_episode_cache.rs1use crate::{
10 app::AppState,
11 common::{page_bean::PageBean, result::ResultBody},
12 entity::member::MemberEpisodeVo,
13 utils::fast_json,
14};
15use std::sync::Arc;
16
17pub struct MemberEpisodePageCache;
19
20fn cache_ttl_secs() -> u64 {
22 std::env::var("MEMBER_EPISODE_CACHE_SECS")
23 .ok()
24 .and_then(|v| v.parse().ok())
25 .unwrap_or(60)
26}
27
28pub fn new_member_episode_page_cache() -> MemberEpisodePageCache {
30 MemberEpisodePageCache
31}
32
33pub fn member_episode_cache_key(member_id: i32, page: i32, page_size: i32) -> String {
35 format!("member_episodes:{member_id}:{page}:{page_size}")
36}
37
38pub async fn get_member_episode_json_cached(state: &AppState, key: &str) -> Option<Arc<Vec<u8>>> {
40 state.redis.get_json_bytes(key).await
41}
42
43pub async fn set_member_episode_json_cached(
45 state: &AppState,
46 key: String,
47 page: PageBean<MemberEpisodeVo>,
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_member_episodes(state: &AppState, member_id: i32) {
62 state
63 .redis
64 .del_json_pattern(&format!("member_episodes:{member_id}:*"))
65 .await;
66}