package cache import ( "fmt" ) // 缓存键前缀常量 const ( // 帖子相关 PrefixPostList = "posts:list" PrefixPost = "posts:detail" // 会话相关 PrefixConversationList = "conversations:list" PrefixConversationDetail = "conversations:detail" // 群组相关 PrefixGroupMembers = "groups:members" PrefixGroupInfo = "groups:info" // 未读数相关 PrefixUnreadSystem = "unread:system" PrefixUnreadConversation = "unread:conversation" PrefixUnreadDetail = "unread:detail" // 用户相关 PrefixUserInfo = "users:info" PrefixUserMe = "users:me" // 消息缓存相关 keyPrefixMsgHash = "msg_hash" // 消息详情 Hash keyPrefixMsgIndex = "msg_index" // 消息索引 Sorted Set keyPrefixMsgCount = "msg_count" // 消息计数 keyPrefixMsgSeq = "msg_seq" // Seq 计数器 keyPrefixMsgPage = "msg_page" // 分页缓存 ) // PostListKey 生成帖子列表缓存键 // postType: 帖子类型 (recommend, hot, follow, latest) // page: 页码 // pageSize: 每页数量 // userID: 用户维度(仅在个性化列表如 follow 场景使用) func PostListKey(postType string, userID string, page, pageSize int) string { if userID == "" { return fmt.Sprintf("%s:%s:%d:%d", PrefixPostList, postType, page, pageSize) } return fmt.Sprintf("%s:%s:%s:%d:%d", PrefixPostList, postType, userID, page, pageSize) } // PostDetailKey 生成帖子详情缓存键 func PostDetailKey(postID string) string { return fmt.Sprintf("%s:%s", PrefixPost, postID) } // ConversationListKey 生成会话列表缓存键 func ConversationListKey(userID string, page, pageSize int) string { return fmt.Sprintf("%s:%s:%d:%d", PrefixConversationList, userID, page, pageSize) } // ConversationDetailKey 生成会话详情缓存键 func ConversationDetailKey(conversationID, userID string) string { return fmt.Sprintf("%s:%s:%s", PrefixConversationDetail, conversationID, userID) } // GroupMembersKey 生成群组成员缓存键 func GroupMembersKey(groupID string, page, pageSize int) string { return fmt.Sprintf("%s:%s:page:%d:size:%d", PrefixGroupMembers, groupID, page, pageSize) } // GroupMembersAllKey 生成群组全量成员ID列表缓存键 func GroupMembersAllKey(groupID string) string { return fmt.Sprintf("%s:all:%s", PrefixGroupMembers, groupID) } // GroupInfoKey 生成群组信息缓存键 func GroupInfoKey(groupID string) string { return fmt.Sprintf("%s:%s", PrefixGroupInfo, groupID) } // UnreadSystemKey 生成系统消息未读数缓存键 func UnreadSystemKey(userID string) string { return fmt.Sprintf("%s:%s", PrefixUnreadSystem, userID) } // UnreadConversationKey 生成会话未读总数缓存键 func UnreadConversationKey(userID string) string { return fmt.Sprintf("%s:%s", PrefixUnreadConversation, userID) } // UnreadDetailKey 生成单个会话未读数缓存键 func UnreadDetailKey(userID, conversationID string) string { return fmt.Sprintf("%s:%s:%s", PrefixUnreadDetail, userID, conversationID) } // UserInfoKey 生成用户信息缓存键 func UserInfoKey(userID string) string { return fmt.Sprintf("%s:%s", PrefixUserInfo, userID) } // UserMeKey 生成当前用户信息缓存键 func UserMeKey(userID string) string { return fmt.Sprintf("%s:%s", PrefixUserMe, userID) } // InvalidatePostList 失效帖子列表缓存 func InvalidatePostList(cache Cache) { cache.DeleteByPrefix(PrefixPostList) } // InvalidatePostDetail 失效帖子详情缓存 func InvalidatePostDetail(cache Cache, postID string) { cache.Delete(PostDetailKey(postID)) } // InvalidateConversationList 失效会话列表缓存 func InvalidateConversationList(cache Cache, userID string) { cache.DeleteByPrefix(PrefixConversationList + ":" + userID + ":") } // InvalidateConversationDetail 失效会话详情缓存 func InvalidateConversationDetail(cache Cache, conversationID, userID string) { cache.Delete(ConversationDetailKey(conversationID, userID)) } // InvalidateGroupMembers 失效群组成员缓存 func InvalidateGroupMembers(cache Cache, groupID string) { cache.DeleteByPrefix(PrefixGroupMembers + ":" + groupID) } // InvalidateGroupInfo 失效群组信息缓存 func InvalidateGroupInfo(cache Cache, groupID string) { cache.Delete(GroupInfoKey(groupID)) } // InvalidateUnreadSystem 失效系统消息未读数缓存 func InvalidateUnreadSystem(cache Cache, userID string) { cache.Delete(UnreadSystemKey(userID)) } // InvalidateUnreadConversation 失效会话未读数缓存 func InvalidateUnreadConversation(cache Cache, userID string) { cache.Delete(UnreadConversationKey(userID)) } // InvalidateUnreadDetail 失效单个会话未读数缓存 func InvalidateUnreadDetail(cache Cache, userID, conversationID string) { cache.Delete(UnreadDetailKey(userID, conversationID)) } // InvalidateUserInfo 失效用户信息缓存 func InvalidateUserInfo(cache Cache, userID string) { cache.Delete(UserInfoKey(userID)) cache.Delete(UserMeKey(userID)) } // ============================================================ // 消息缓存 Key 生成函数 // ============================================================ // MessageHashKey 消息详情 Hash key func MessageHashKey(convID string) string { return fmt.Sprintf("%s:%s", keyPrefixMsgHash, convID) } // MessageIndexKey 消息索引 Sorted Set key func MessageIndexKey(convID string) string { return fmt.Sprintf("%s:%s", keyPrefixMsgIndex, convID) } // MessageCountKey 消息计数 key func MessageCountKey(convID string) string { return fmt.Sprintf("%s:%s", keyPrefixMsgCount, convID) } // MessageSeqKey Seq 计数器 key func MessageSeqKey(convID string) string { return fmt.Sprintf("%s:%s", keyPrefixMsgSeq, convID) } // MessagePageKey 分页缓存 key func MessagePageKey(convID string, page, pageSize int) string { return fmt.Sprintf("%s:%s:%d:%d", keyPrefixMsgPage, convID, page, pageSize) } // InvalidateMessagePages 失效会话消息分页缓存 func InvalidateMessagePages(cache Cache, conversationID string) { cache.DeleteByPrefix(fmt.Sprintf("%s:%s:", keyPrefixMsgPage, conversationID)) }