cache.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. from sql import cache
  2. from redis import RedisError
  3. from functools import wraps
  4. from datetime import datetime
  5. def __try_redis(ret=None):
  6. def try_redis(func):
  7. @wraps(func)
  8. def try_func(*args, **kwargs):
  9. try:
  10. res = func(*args, **kwargs)
  11. except RedisError:
  12. cache.logger.error(f"Redis error with {args} {kwargs}", exc_info=True, stack_info=True)
  13. return ret
  14. return res
  15. return try_func
  16. return try_redis
  17. @__try_redis(None)
  18. def read_msg_from_cache(msg_id: int):
  19. msg = cache.hgetall(f"cache:msg:{msg_id}")
  20. if len(msg) != 4:
  21. return None
  22. return [msg.get("Email", ""),
  23. msg.get("Content"),
  24. datetime.fromisoformat(msg.get("UpdateTime", "2022-1-1 00:00:00")),
  25. bool(msg.get("Secret", False))]
  26. @__try_redis(None)
  27. def write_msg_to_cache(msg_id: int, email: str, content: str, update_time: str | datetime, secret: bool):
  28. cache_name = f"cache:msg:{msg_id}"
  29. cache.delete(cache_name)
  30. cache.hset(cache_name, mapping={
  31. "Email": email,
  32. "Content": content,
  33. "UpdateTime": str(update_time),
  34. "Secret": str(secret)
  35. })
  36. cache.expire(cache_name, 3600)
  37. @__try_redis(None)
  38. def delete_msg_from_cache(msg_id: int):
  39. cache.delete(f"cache:msg:{msg_id}")
  40. @__try_redis(None)
  41. def get_msg_cout_from_cache():
  42. count = cache.get("cache:msg_count")
  43. if count is not None:
  44. return int(count)
  45. @__try_redis(None)
  46. def write_msg_count_to_cache(count):
  47. count = cache.set("cache:msg_count", str(count))
  48. cache.expire("cache:msg_count", 3600)
  49. return count
  50. @__try_redis(None)
  51. def delete_msg_count_from_cache():
  52. cache.delete("cache:msg_count")
  53. @__try_redis(None)
  54. def get_user_msg_count_from_cache(user_id: int):
  55. count = cache.get(f"cache:msg_count:{user_id}")
  56. if count is not None:
  57. return int(count)
  58. @__try_redis(None)
  59. def write_user_msg_count_to_cache(user_id, count):
  60. cache_name = f"cache:msg_count:{user_id}"
  61. count = cache.set(cache_name, str(count))
  62. cache.expire(cache_name, 3600)
  63. return count
  64. @__try_redis(None)
  65. def delete_all_user_msg_count_from_cache():
  66. for i in cache.keys("cache:msg_count:*"):
  67. cache.delete(i)
  68. @__try_redis(None)
  69. def read_blog_from_cache(blog_id: int):
  70. blog = cache.hgetall(f"cache:blog:{blog_id}")
  71. if len(blog) != 7:
  72. return None
  73. return [int(blog.get("Auth", -1)),
  74. blog.get("Title"),
  75. blog.get("SubTitle"),
  76. blog.get("Content"),
  77. datetime.fromisoformat(blog.get("UpdateTime", "2022-1-1 00:00:00")),
  78. datetime.fromisoformat(blog.get("CreateTime", "2022-1-1 00:00:00")),
  79. bool(blog.get("Top", False))]
  80. @__try_redis(None)
  81. def write_blog_to_cache(blog_id: int, auth_id: str, title: str, subtitle: str, content: str,
  82. update_time: str | datetime, create_time: str | datetime, top: bool):
  83. cache_name = f"cache:blog:{blog_id}"
  84. cache.delete(cache_name)
  85. cache.hset(cache_name, mapping={
  86. "Auth": auth_id,
  87. "Title": title,
  88. "SubTitle": subtitle,
  89. "Content": content,
  90. "UpdateTime": str(update_time),
  91. "CreateTime": str(create_time),
  92. "Top": str(top)
  93. })
  94. cache.expire(cache_name, 3600)
  95. @__try_redis(None)
  96. def delete_blog_from_cache(blog_id: int):
  97. cache.delete(f"cache:blog:{blog_id}")
  98. @__try_redis(None)
  99. def get_blog_count_from_cache():
  100. count = cache.get("cache:blog_count")
  101. if count is not None:
  102. return int(count)
  103. return
  104. @__try_redis(None)
  105. def write_blog_count_to_cache(count):
  106. count = cache.set("cache:blog_count", str(count))
  107. cache.expire("cache:blog_count", 3600)
  108. return count
  109. @__try_redis(None)
  110. def delete_blog_count_from_cache():
  111. cache.delete("cache:blog_count")
  112. @__try_redis(None)
  113. def get_archive_blog_count_from_cache(archive_id: int):
  114. count = cache.get(f"cache:blog_count:archive:{archive_id}")
  115. if count is not None:
  116. return int(count)
  117. @__try_redis(None)
  118. def write_archive_blog_count_to_cache(archive_id, count):
  119. cache_name = f"cache:blog_count:archive:{archive_id}"
  120. count = cache.set(cache_name, str(count))
  121. cache.expire(cache_name, 3600)
  122. return count
  123. @__try_redis(None)
  124. def delete_all_archive_blog_count_from_cache():
  125. for i in cache.keys("cache:blog_count:archive:*"):
  126. cache.delete(i)
  127. @__try_redis(None)
  128. def delete_archive_blog_count_from_cache(archive_id: int):
  129. cache.delete(f"cache:blog_count:archive:{archive_id}")
  130. @__try_redis(None)
  131. def get_user_blog_count_from_cache(user_id: int):
  132. count = cache.get(f"cache:blog_count:user:{user_id}")
  133. if count is not None:
  134. return int(count)
  135. @__try_redis(None)
  136. def write_user_blog_count_to_cache(user_id, count):
  137. cache_name = f"cache:blog_count:user:{user_id}"
  138. count = cache.set(cache_name, str(count))
  139. cache.expire(cache_name, 3600)
  140. return count
  141. @__try_redis(None)
  142. def delete_all_user_blog_count_from_cache():
  143. for i in cache.keys("cache:blog_count:user:*"):
  144. cache.delete(i)
  145. @__try_redis(None)
  146. def delete_user_blog_count_from_cache(user_id: int):
  147. cache.delete(f"cache:blog_count:user:{user_id}")
  148. @__try_redis(None)
  149. def read_archive_from_cache(archive_id: int):
  150. archive = cache.hgetall(f"cache:archive:{archive_id}")
  151. if len(archive) != 2:
  152. return None
  153. return [archive.get("Name", ""), archive.get("DescribeText")]
  154. @__try_redis(None)
  155. def write_archive_to_cache(archive_id: int, name: str, describe: str):
  156. cache_name = f"cache:archive:{archive_id}"
  157. cache.delete(cache_name)
  158. cache.hset(cache_name, mapping={
  159. "Name": name,
  160. "DescribeText": describe,
  161. })
  162. cache.expire(cache_name, 3600)
  163. @__try_redis(None)
  164. def delete_archive_from_cache(archive_id: int):
  165. cache.delete(f"cache:archive:{archive_id}")
  166. @__try_redis(None)
  167. def get_blog_archive_from_cache(blog_id: int):
  168. blog_archive = cache.lrange(f"cache:blog_archive:{blog_id}", 0, -1)
  169. if len(blog_archive) == 0:
  170. return None
  171. return blog_archive
  172. @__try_redis(None)
  173. def write_blog_archive_to_cache(blog_id: int, archive):
  174. cache_name = f"cache:blog_archive:{blog_id}"
  175. cache.delete(cache_name)
  176. cache.rpush(cache_name, *archive)
  177. cache.expire(cache_name, 3600)
  178. @__try_redis(None)
  179. def delete_blog_archive_from_cache(blog_id: int):
  180. cache.delete(f"cache:blog_archive:{blog_id}")
  181. @__try_redis(None)
  182. def delete_all_blog_archive_from_cache():
  183. for i in cache.keys("cache:blog_archive:*"):
  184. cache.delete(i)