1
0

cache.py 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  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_user_msg_count_from_cache(user_id):
  66. cache.delete(f"cache:msg_count:{user_id}")
  67. @__try_redis(None)
  68. def delete_all_user_msg_count_from_cache():
  69. for i in cache.keys("cache:msg_count:*"):
  70. cache.delete(i)
  71. @__try_redis(None)
  72. def read_blog_from_cache(blog_id: int):
  73. blog = cache.hgetall(f"cache:blog:{blog_id}")
  74. if len(blog) != 7:
  75. return None
  76. return [int(blog.get("Auth", -1)),
  77. blog.get("Title"),
  78. blog.get("SubTitle"),
  79. blog.get("Content"),
  80. datetime.fromisoformat(blog.get("UpdateTime", "2022-1-1 00:00:00")),
  81. datetime.fromisoformat(blog.get("CreateTime", "2022-1-1 00:00:00")),
  82. bool(blog.get("Top", False))]
  83. @__try_redis(None)
  84. def write_blog_to_cache(blog_id: int, auth_id: str, title: str, subtitle: str, content: str,
  85. update_time: str | datetime, create_time: str | datetime, top: bool):
  86. cache_name = f"cache:blog:{blog_id}"
  87. cache.delete(cache_name)
  88. cache.hset(cache_name, mapping={
  89. "Auth": auth_id,
  90. "Title": title,
  91. "SubTitle": subtitle,
  92. "Content": content,
  93. "UpdateTime": str(update_time),
  94. "CreateTime": str(create_time),
  95. "Top": str(top)
  96. })
  97. cache.expire(cache_name, 3600)
  98. @__try_redis(None)
  99. def delete_blog_from_cache(blog_id: int):
  100. cache.delete(f"cache:blog:{blog_id}")
  101. @__try_redis(None)
  102. def get_blog_count_from_cache():
  103. count = cache.get("cache:blog_count")
  104. if count is not None:
  105. return int(count)
  106. return
  107. @__try_redis(None)
  108. def write_blog_count_to_cache(count):
  109. count = cache.set("cache:blog_count", str(count))
  110. cache.expire("cache:blog_count", 3600)
  111. return count
  112. @__try_redis(None)
  113. def delete_blog_count_from_cache():
  114. cache.delete("cache:blog_count")
  115. @__try_redis(None)
  116. def get_archive_blog_count_from_cache(archive_id: int):
  117. count = cache.get(f"cache:blog_count:archive:{archive_id}")
  118. if count is not None:
  119. return int(count)
  120. @__try_redis(None)
  121. def write_archive_blog_count_to_cache(archive_id, count):
  122. cache_name = f"cache:blog_count:archive:{archive_id}"
  123. count = cache.set(cache_name, str(count))
  124. cache.expire(cache_name, 3600)
  125. return count
  126. @__try_redis(None)
  127. def delete_all_archive_blog_count_from_cache():
  128. for i in cache.keys("cache:blog_count:archive:*"):
  129. cache.delete(i)
  130. @__try_redis(None)
  131. def delete_archive_blog_count_from_cache(archive_id: int):
  132. cache.delete(f"cache:blog_count:archive:{archive_id}")
  133. @__try_redis(None)
  134. def get_user_blog_count_from_cache(user_id: int):
  135. count = cache.get(f"cache:blog_count:user:{user_id}")
  136. if count is not None:
  137. return int(count)
  138. @__try_redis(None)
  139. def write_user_blog_count_to_cache(user_id, count):
  140. cache_name = f"cache:blog_count:user:{user_id}"
  141. count = cache.set(cache_name, str(count))
  142. cache.expire(cache_name, 3600)
  143. return count
  144. @__try_redis(None)
  145. def delete_all_user_blog_count_from_cache():
  146. for i in cache.keys("cache:blog_count:user:*"):
  147. cache.delete(i)
  148. @__try_redis(None)
  149. def delete_user_blog_count_from_cache(user_id: int):
  150. cache.delete(f"cache:blog_count:user:{user_id}")
  151. @__try_redis(None)
  152. def read_archive_from_cache(archive_id: int):
  153. archive = cache.hgetall(f"cache:archive:{archive_id}")
  154. if len(archive) != 2:
  155. return None
  156. return [archive.get("Name", ""), archive.get("DescribeText")]
  157. @__try_redis(None)
  158. def write_archive_to_cache(archive_id: int, name: str, describe: str):
  159. cache_name = f"cache:archive:{archive_id}"
  160. cache.delete(cache_name)
  161. cache.hset(cache_name, mapping={
  162. "Name": name,
  163. "DescribeText": describe,
  164. })
  165. cache.expire(cache_name, 3600)
  166. @__try_redis(None)
  167. def delete_archive_from_cache(archive_id: int):
  168. cache.delete(f"cache:archive:{archive_id}")
  169. @__try_redis(None)
  170. def get_blog_archive_from_cache(blog_id: int):
  171. blog_archive = cache.lrange(f"cache:blog_archive:{blog_id}", 0, -1)
  172. if len(blog_archive) == 0:
  173. return None
  174. return blog_archive
  175. @__try_redis(None)
  176. def write_blog_archive_to_cache(blog_id: int, archive):
  177. cache_name = f"cache:blog_archive:{blog_id}"
  178. cache.delete(cache_name)
  179. cache.rpush(cache_name, *archive)
  180. cache.expire(cache_name, 3600)
  181. @__try_redis(None)
  182. def delete_blog_archive_from_cache(blog_id: int):
  183. cache.delete(f"cache:blog_archive:{blog_id}")
  184. @__try_redis(None)
  185. def delete_all_blog_archive_from_cache():
  186. for i in cache.keys("cache:blog_archive:*"):
  187. cache.delete(i)
  188. @__try_redis(None)
  189. def read_comment_from_cache(comment_id: int):
  190. comment = cache.hgetall(f"cache:comment:{comment_id}")
  191. if len(comment) != 2:
  192. return None
  193. return [comment.get("BlogID", ""),
  194. comment.get("Email", ""),
  195. comment.get("Content", ""),
  196. datetime.fromisoformat(comment.get("UpdateTime", "2022-1-1 00:00:00"))]
  197. @__try_redis(None)
  198. def write_comment_to_cache(comment_id: int, blog_id: str, email: str, content: str, update_time: str | datetime):
  199. cache_name = f"cache:comment:{comment_id}"
  200. cache.delete(cache_name)
  201. cache.hset(cache_name, mapping={
  202. "BlogID": blog_id,
  203. "Email": email,
  204. "Content": content,
  205. "UpdateTime": str(update_time)
  206. })
  207. cache.expire(cache_name, 3600)
  208. @__try_redis(None)
  209. def delete_comment_from_cache(comment_id: int):
  210. cache.delete(f"cache:comment:{comment_id}")
  211. @__try_redis(None)
  212. def get_user_comment_count_from_cache(user_id: int):
  213. count = cache.get(f"cache:comment_count:{user_id}")
  214. if count is not None:
  215. return int(count)
  216. @__try_redis(None)
  217. def write_user_comment_count_to_cache(user_id, count):
  218. cache_name = f"cache:comment_count:{user_id}"
  219. count = cache.set(cache_name, str(count))
  220. cache.expire(cache_name, 3600)
  221. return count
  222. @__try_redis(None)
  223. def delete_user_comment_count_from_cache(user_id: int):
  224. cache.delete(f"cache:comment_count:{user_id}")
  225. @__try_redis(None)
  226. def delete_all_user_comment_count_from_cache():
  227. for i in cache.keys("cache:comment_count:*"):
  228. cache.delete(i)