tdm_server_rust/cache/
member_all_cache.rs1use crate::{
13 app::AppState, common::result::ResultBody, entity::member::MemberCache, utils::fast_json,
14};
15use std::sync::Arc;
16
17const CACHE_KEY: &str = "member_all";
19const VALUE_NS: &str = "member_all";
21
22#[derive(Clone)]
24pub struct MemberAllCacheEntry {
25 pub data: Vec<MemberCache>,
27 pub json: Arc<Vec<u8>>,
29}
30
31pub struct MemberAllCache;
33
34pub fn new_member_all_cache() -> MemberAllCache {
36 MemberAllCache
37}
38
39pub async fn invalidate_member_all(state: &AppState) {
41 state.redis.del_json(CACHE_KEY).await;
42 state.redis.del_value(VALUE_NS, CACHE_KEY).await;
43}
44
45pub fn member_all_cache_key() -> &'static str {
47 CACHE_KEY
48}
49
50pub async fn get_member_all_json_cached(state: &AppState) -> Option<Arc<Vec<u8>>> {
52 state.redis.get_json_bytes(CACHE_KEY).await
53}
54
55pub async fn get_member_all_cached(state: &AppState) -> Option<Vec<MemberCache>> {
57 state.redis.get_value(VALUE_NS, CACHE_KEY).await
58}
59
60pub async fn set_member_all_cached(state: &AppState, data: Vec<MemberCache>) {
62 let body = ResultBody::success_data(&data);
63 let json = match fast_json::to_vec(&body) {
64 Ok(bytes) => Arc::new(bytes),
65 Err(_) => return,
66 };
67 state
68 .redis
69 .set_json_bytes_ttl(CACHE_KEY, json.as_ref(), cache_ttl_secs())
70 .await;
71 state
72 .redis
73 .set_value_ttl(VALUE_NS, CACHE_KEY, &data, cache_ttl_secs())
74 .await;
75}
76
77fn cache_ttl_secs() -> u64 {
79 std::env::var("MEMBER_ALL_CACHE_SECS")
80 .ok()
81 .and_then(|v| v.parse().ok())
82 .unwrap_or(60)
83}