Ver Fonte

feat: 评论启用redis缓存机制

SongZihuan há 2 anos atrás
pai
commit
cea70431a2
3 ficheiros alterados com 78 adições e 2 exclusões
  1. 60 0
      sql/cache.py
  2. 15 1
      sql/comment.py
  3. 3 1
      sql/msg.py

+ 60 - 0
sql/cache.py

@@ -82,6 +82,11 @@ def write_user_msg_count_to_cache(user_id, count):
     return count
 
 
+@__try_redis(None)
+def delete_user_msg_count_from_cache(user_id):
+    cache.delete(f"cache:msg_count:{user_id}")
+
+
 @__try_redis(None)
 def delete_all_user_msg_count_from_cache():
     for i in cache.keys("cache:msg_count:*"):
@@ -245,3 +250,58 @@ def delete_blog_archive_from_cache(blog_id: int):
 def delete_all_blog_archive_from_cache():
     for i in cache.keys("cache:blog_archive:*"):
         cache.delete(i)
+
+
+@__try_redis(None)
+def read_comment_from_cache(comment_id: int):
+    comment = cache.hgetall(f"cache:comment:{comment_id}")
+    if len(comment) != 2:
+        return None
+    return [comment.get("BlogID", ""),
+            comment.get("Email", ""),
+            comment.get("Content", ""),
+            datetime.fromisoformat(comment.get("UpdateTime", "2022-1-1 00:00:00"))]
+
+
+@__try_redis(None)
+def write_comment_to_cache(comment_id: int, blog_id: str, email: str, content: str, update_time: str | datetime):
+    cache_name = f"cache:comment:{comment_id}"
+    cache.delete(cache_name)
+    cache.hset(cache_name, mapping={
+        "BlogID": blog_id,
+        "Email": email,
+        "Content": content,
+        "UpdateTime": str(update_time)
+    })
+    cache.expire(cache_name, 3600)
+
+
+@__try_redis(None)
+def delete_comment_from_cache(comment_id: int):
+    cache.delete(f"cache:comment:{comment_id}")
+
+
+@__try_redis(None)
+def get_user_comment_count_from_cache(user_id: int):
+    count = cache.get(f"cache:comment_count:{user_id}")
+    if count is not None:
+        return int(count)
+
+
+@__try_redis(None)
+def write_user_comment_count_to_cache(user_id, count):
+    cache_name = f"cache:comment_count:{user_id}"
+    count = cache.set(cache_name, str(count))
+    cache.expire(cache_name, 3600)
+    return count
+
+
+@__try_redis(None)
+def delete_user_comment_count_from_cache(user_id: int):
+    cache.delete(f"cache:comment_count:{user_id}")
+
+
+@__try_redis(None)
+def delete_all_user_comment_count_from_cache():
+    for i in cache.keys("cache:comment_count:*"):
+        cache.delete(i)

+ 15 - 1
sql/comment.py

@@ -1,4 +1,7 @@
 from sql import db
+from sql.cache import (read_comment_from_cache, write_comment_to_cache, delete_comment_from_cache,
+                       get_user_comment_count_from_cache, write_user_comment_count_to_cache,
+                       delete_all_user_comment_count_from_cache, delete_user_comment_count_from_cache)
 
 
 def read_comment_list(blog_id: int):
@@ -14,6 +17,8 @@ def read_comment_list(blog_id: int):
 
 def create_comment(blog_id: int, user_id: int, content: str):
     """ 新建 comment """
+    delete_user_comment_count_from_cache(user_id)
+
     content = content.replace("'", "''")
     cur = db.insert("INSERT INTO comment(BlogID, Auth, Content) "
                     "VALUES (%s, %s, %s)", blog_id, user_id, content)
@@ -24,14 +29,23 @@ def create_comment(blog_id: int, user_id: int, content: str):
 
 def read_comment(comment_id: int):
     """ 读取 comment """
+    res = read_comment_from_cache(comment_id)
+    if res is not None:
+        return res
+
     cur = db.search("SELECT BlogID, Email, Content, UpdateTime FROM comment_user WHERE CommentID=%s", comment_id)
     if cur is None or cur.rowcount == 0:
         return [-1, "", "", 0]
-    return cur.fetchone()
+
+    res = cur.fetchone()
+    write_comment_to_cache(comment_id, *res)
+    return res
 
 
 def delete_comment(comment_id):
     """ 删除评论 """
+    delete_comment_from_cache(comment_id)
+    delete_all_user_comment_count_from_cache()
     cur = db.delete("DELETE FROM comment WHERE ID=%s", comment_id)
     if cur is None or cur.rowcount == 0:
         return False

+ 3 - 1
sql/msg.py

@@ -2,7 +2,7 @@ from sql import db
 from sql.cache import (read_msg_from_cache, write_msg_to_cache, delete_msg_from_cache,
                        get_msg_cout_from_cache, write_msg_count_to_cache, delete_msg_count_from_cache,
                        get_user_msg_count_from_cache, write_user_msg_count_to_cache,
-                       delete_all_user_msg_count_from_cache)
+                       delete_all_user_msg_count_from_cache, delete_user_msg_count_from_cache)
 
 from typing import Optional
 
@@ -40,6 +40,8 @@ def read_msg_list(limit: Optional[int] = None, offset: Optional[int] = None, sho
 
 def create_msg(auth: int, content: str, secret: bool = False):
     delete_msg_count_from_cache()
+    delete_user_msg_count_from_cache(auth)
+
     content = content.replace("'", "''")
     cur = db.insert("INSERT INTO message(Auth, Content, Secret) "
                     "VALUES (%s, %s, %s)", auth, content, 1 if secret else 0)