瀏覽代碼

feat: 修复cache布尔类型存储的问题

SongZihuan 2 年之前
父節點
當前提交
4261a1d4b5
共有 4 個文件被更改,包括 15 次插入11 次删除
  1. 1 1
      object/blog.py
  2. 3 2
      sql/blog.py
  3. 8 6
      sql/cache.py
  4. 3 2
      sql/msg.py

+ 1 - 1
object/blog.py

@@ -95,7 +95,7 @@ class BlogArticle(_BlogArticle):
 
     @property
     def top(self):
-        return self.info.top == DBBit.BIT_1
+        return self.info.top
 
     @top.setter
     def top(self, top: bool):

+ 3 - 2
sql/blog.py

@@ -1,4 +1,5 @@
 from sql import db
+from sql.base import DBBit
 from sql.archive import add_blog_to_archive
 from sql.cache import (write_blog_to_cache, get_blog_from_cache, delete_blog_from_cache,
                        write_blog_count_to_cache, get_blog_count_from_cache, delete_blog_count_from_cache,
@@ -58,8 +59,8 @@ def read_blog(blog_id: int) -> list:
     if cur is None or cur.rowcount == 0:
         return [-1, "", "", "", 0, -1, False]
     res = cur.fetchone()
-    write_blog_to_cache(blog_id, *res)
-    return res
+    write_blog_to_cache(blog_id, *res, is_db_bit=True)
+    return [*res[:6], res[-1] == DBBit.BIT_1]
 
 
 def delete_blog(blog_id: int):

+ 8 - 6
sql/cache.py

@@ -1,4 +1,5 @@
 from sql import cache
+from sql.base import DBBit
 from configure import conf
 
 from redis import RedisError
@@ -32,18 +33,19 @@ def get_msg_from_cache(msg_id: int):
     return [msg.get("Email", ""),
             msg.get("Content"),
             datetime.fromtimestamp(float(msg.get("UpdateTime", 0.0))),
-            bool(msg.get("Secret", False))]
+            msg.get("Secret", "False") == "True"]
 
 
 @__try_redis(None)
-def write_msg_to_cache(msg_id: int, email: str, content: str, update_time: str | datetime, secret: bool):
+def write_msg_to_cache(msg_id: int, email: str, content: str, update_time: str | datetime, secret: bool,
+                       is_db_bit=False):
     cache_name = f"{CACHE_PREFIX}:msg:{msg_id}"
     cache.delete(cache_name)
     cache.hset(cache_name, mapping={
         "Email": email,
         "Content": content,
         "UpdateTime": datetime.timestamp(update_time),
-        "Secret": str(secret)
+        "Secret": str(secret == DBBit.BIT_1 if is_db_bit else secret)
     })
     cache.expire(cache_name, CACHE_TIME)
 
@@ -109,12 +111,12 @@ def get_blog_from_cache(blog_id: int):
             blog.get("Content"),
             datetime.fromtimestamp(float(blog.get("UpdateTime", 0.0))),
             datetime.fromtimestamp(float(blog.get("CreateTime", 0.0))),
-            bool(blog.get("Top", False))]
+            blog.get("Top", "False") == "True"]
 
 
 @__try_redis(None)
 def write_blog_to_cache(blog_id: int, auth_id: str, title: str, subtitle: str, content: str,
-                        update_time: str | datetime, create_time: str | datetime, top: bool):
+                        update_time: str | datetime, create_time: str | datetime, top: bool, is_db_bit=False):
     cache_name = f"{CACHE_PREFIX}:blog:{blog_id}"
     cache.delete(cache_name)
     cache.hset(cache_name, mapping={
@@ -124,7 +126,7 @@ def write_blog_to_cache(blog_id: int, auth_id: str, title: str, subtitle: str, c
         "Content": content,
         "UpdateTime": datetime.timestamp(update_time),
         "CreateTime": datetime.timestamp(create_time),
-        "Top": str(top)
+        "Top": str(top == DBBit.BIT_1 if is_db_bit else top)
     })
     cache.expire(cache_name, CACHE_TIME)
 

+ 3 - 2
sql/msg.py

@@ -1,4 +1,5 @@
 from sql import db
+from sql.base import DBBit
 from sql.cache import (get_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,
@@ -61,8 +62,8 @@ def read_msg(msg_id: int):
         return ["", "", "0", False]
 
     res = cur.fetchone()
-    write_msg_to_cache(msg_id, *res)
-    return res
+    write_msg_to_cache(msg_id, *res, is_db_bit=True)
+    return [*res[:3], res[-1] == DBBit.BIT_1]
 
 
 def delete_msg(msg_id: int):