123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414 |
- from sql import cache
- from configure import conf
- from redis import RedisError
- from functools import wraps
- from datetime import datetime
- CACHE_TIME = int(conf["CACHE_EXPIRE"])
- CACHE_PREFIX = conf["CACHE_PREFIX"]
- def __try_redis(ret=None):
- def try_redis(func):
- @wraps(func)
- def try_func(*args, **kwargs):
- try:
- res = func(*args, **kwargs)
- except RedisError:
- cache.logger.error(f"Redis error with {args} {kwargs}", exc_info=True, stack_info=True)
- return ret
- return res
- return try_func
- return try_redis
- @__try_redis(None)
- def get_msg_from_cache(msg_id: int):
- msg = cache.hgetall(f"{CACHE_PREFIX}:msg:{msg_id}")
- if len(msg) != 4:
- return None
- return [msg.get("Email", ""),
- msg.get("Content"),
- datetime.fromisoformat(msg.get("UpdateTime", "2022-1-1 00:00:00")),
- bool(msg.get("Secret", False))]
- @__try_redis(None)
- def write_msg_to_cache(msg_id: int, email: str, content: str, update_time: str | datetime, secret: bool):
- cache_name = f"{CACHE_PREFIX}:msg:{msg_id}"
- cache.delete(cache_name)
- cache.hset(cache_name, mapping={
- "Email": email,
- "Content": content,
- "UpdateTime": str(update_time),
- "Secret": str(secret)
- })
- cache.expire(cache_name, CACHE_TIME)
- @__try_redis(None)
- def delete_msg_from_cache(msg_id: int):
- cache.delete(f"{CACHE_PREFIX}:msg:{msg_id}")
- @__try_redis(None)
- def get_msg_cout_from_cache():
- count = cache.get(f"{CACHE_PREFIX}:msg_count")
- if count is not None:
- return int(count)
- @__try_redis(None)
- def write_msg_count_to_cache(count):
- count = cache.set(f"{CACHE_PREFIX}:msg_count", str(count))
- cache.expire(f"{CACHE_PREFIX}:msg_count", CACHE_TIME)
- return count
- @__try_redis(None)
- def delete_msg_count_from_cache():
- cache.delete(f"{CACHE_PREFIX}:msg_count")
- @__try_redis(None)
- def get_user_msg_count_from_cache(user_id: int):
- count = cache.get(f"{CACHE_PREFIX}:msg_count:{user_id}")
- if count is not None:
- return int(count)
- @__try_redis(None)
- def write_user_msg_count_to_cache(user_id, count):
- cache_name = f"{CACHE_PREFIX}:msg_count:{user_id}"
- count = cache.set(cache_name, str(count))
- cache.expire(cache_name, CACHE_TIME)
- return count
- @__try_redis(None)
- def delete_user_msg_count_from_cache(user_id):
- cache.delete(f"{CACHE_PREFIX}:msg_count:{user_id}")
- @__try_redis(None)
- def delete_all_user_msg_count_from_cache():
- for i in cache.keys(f"{CACHE_PREFIX}:msg_count:*"):
- cache.delete(i)
- @__try_redis(None)
- def get_blog_from_cache(blog_id: int):
- blog = cache.hgetall(f"{CACHE_PREFIX}:blog:{blog_id}")
- if len(blog) != 7:
- return None
- return [int(blog.get("Auth", -1)),
- blog.get("Title"),
- blog.get("SubTitle"),
- blog.get("Content"),
- datetime.fromisoformat(blog.get("UpdateTime", "2022-1-1 00:00:00")),
- datetime.fromisoformat(blog.get("CreateTime", "2022-1-1 00:00:00")),
- bool(blog.get("Top", False))]
- @__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):
- cache_name = f"{CACHE_PREFIX}:blog:{blog_id}"
- cache.delete(cache_name)
- cache.hset(cache_name, mapping={
- "Auth": auth_id,
- "Title": title,
- "SubTitle": subtitle,
- "Content": content,
- "UpdateTime": str(update_time),
- "CreateTime": str(create_time),
- "Top": str(top)
- })
- cache.expire(cache_name, CACHE_TIME)
- @__try_redis(None)
- def delete_blog_from_cache(blog_id: int):
- cache.delete(f"{CACHE_PREFIX}:blog:{blog_id}")
- @__try_redis(None)
- def get_blog_count_from_cache():
- count = cache.get(f"{CACHE_PREFIX}:blog_count")
- if count is not None:
- return int(count)
- @__try_redis(None)
- def write_blog_count_to_cache(count):
- count = cache.set(f"{CACHE_PREFIX}:blog_count", str(count))
- cache.expire(f"{CACHE_PREFIX}:blog_count", CACHE_TIME)
- return count
- @__try_redis(None)
- def delete_blog_count_from_cache():
- cache.delete(f"{CACHE_PREFIX}:blog_count")
- @__try_redis(None)
- def get_archive_blog_count_from_cache(archive_id: int):
- count = cache.get(f"{CACHE_PREFIX}:blog_count:archive:{archive_id}")
- if count is not None:
- return int(count)
- @__try_redis(None)
- def write_archive_blog_count_to_cache(archive_id, count):
- cache_name = f"{CACHE_PREFIX}:blog_count:archive:{archive_id}"
- count = cache.set(cache_name, str(count))
- cache.expire(cache_name, CACHE_TIME)
- return count
- @__try_redis(None)
- def delete_all_archive_blog_count_from_cache():
- for i in cache.keys(f"{CACHE_PREFIX}:blog_count:archive:*"):
- cache.delete(i)
- @__try_redis(None)
- def delete_archive_blog_count_from_cache(archive_id: int):
- cache.delete(f"{CACHE_PREFIX}:blog_count:archive:{archive_id}")
- @__try_redis(None)
- def get_user_blog_count_from_cache(user_id: int):
- count = cache.get(f"{CACHE_PREFIX}:blog_count:user:{user_id}")
- if count is not None:
- return int(count)
- @__try_redis(None)
- def write_user_blog_count_to_cache(user_id, count):
- cache_name = f"{CACHE_PREFIX}:blog_count:user:{user_id}"
- count = cache.set(cache_name, str(count))
- cache.expire(cache_name, CACHE_TIME)
- return count
- @__try_redis(None)
- def delete_all_user_blog_count_from_cache():
- for i in cache.keys(f"{CACHE_PREFIX}:blog_count:user:*"):
- cache.delete(i)
- @__try_redis(None)
- def delete_user_blog_count_from_cache(user_id: int):
- cache.delete(f"{CACHE_PREFIX}:blog_count:user:{user_id}")
- @__try_redis(None)
- def get_archive_from_cache(archive_id: int):
- archive = cache.hgetall(f"{CACHE_PREFIX}:archive:{archive_id}")
- if len(archive) != 2:
- return None
- return [archive.get("Name", ""), archive.get("DescribeText")]
- @__try_redis(None)
- def write_archive_to_cache(archive_id: int, name: str, describe: str):
- cache_name = f"{CACHE_PREFIX}:archive:{archive_id}"
- cache.delete(cache_name)
- cache.hset(cache_name, mapping={
- "Name": name,
- "DescribeText": describe,
- })
- cache.expire(cache_name, CACHE_TIME)
- @__try_redis(None)
- def delete_archive_from_cache(archive_id: int):
- cache.delete(f"{CACHE_PREFIX}:archive:{archive_id}")
- @__try_redis(None)
- def get_blog_archive_from_cache(blog_id: int):
- blog_archive = cache.lrange(f"{CACHE_PREFIX}:blog_archive:{blog_id}", 0, -1)
- if len(blog_archive) == 0:
- return None
- elif blog_archive[0] == '-1':
- return []
- return blog_archive
- @__try_redis(None)
- def write_blog_archive_to_cache(blog_id: int, archive):
- cache_name = f"{CACHE_PREFIX}:blog_archive:{blog_id}"
- cache.delete(cache_name)
- if len(archive) == 0:
- cache.rpush(cache_name, -1)
- cache.rpush(cache_name, *archive)
- cache.expire(cache_name, CACHE_TIME)
- @__try_redis(None)
- def delete_blog_archive_from_cache(blog_id: int):
- cache.delete(f"{CACHE_PREFIX}:blog_archive:{blog_id}")
- @__try_redis(None)
- def delete_all_blog_archive_from_cache():
- for i in cache.keys(f"{CACHE_PREFIX}:blog_archive:*"):
- cache.delete(i)
- @__try_redis(None)
- def get_comment_from_cache(comment_id: int):
- comment = cache.hgetall(f"{CACHE_PREFIX}:comment:{comment_id}")
- if len(comment) != 4:
- 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_PREFIX}: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, CACHE_TIME)
- @__try_redis(None)
- def delete_comment_from_cache(comment_id: int):
- cache.delete(f"{CACHE_PREFIX}:comment:{comment_id}")
- @__try_redis(None)
- def get_user_comment_count_from_cache(user_id: int):
- count = cache.get(f"{CACHE_PREFIX}: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_PREFIX}:comment_count:{user_id}"
- count = cache.set(cache_name, str(count))
- cache.expire(cache_name, CACHE_TIME)
- return count
- @__try_redis(None)
- def delete_user_comment_count_from_cache(user_id: int):
- cache.delete(f"{CACHE_PREFIX}:comment_count:{user_id}")
- @__try_redis(None)
- def delete_all_user_comment_count_from_cache():
- for i in cache.keys(f"{CACHE_PREFIX}:comment_count:*"):
- cache.delete(i)
- @__try_redis(None)
- def get_user_from_cache(email: str):
- user = cache.hgetall(f"{CACHE_PREFIX}:user:{email}")
- if len(user) != 3:
- return None
- return [user.get("PasswdHash", ""),
- int(user.get("Role", "")),
- int(user.get("ID", ""))]
- @__try_redis(None)
- def write_user_to_cache(email: str, passwd_hash: str, role: int, user_id: int):
- cache_name = f"{CACHE_PREFIX}:user:{email}"
- cache.delete(cache_name)
- cache.hset(cache_name, mapping={
- "PasswdHash": passwd_hash,
- "Role": role,
- "ID": user_id,
- })
- cache.expire(cache_name, CACHE_TIME)
- @__try_redis(None)
- def delete_user_from_cache(email: str):
- cache.delete(f"{CACHE_PREFIX}:user:{email}")
- @__try_redis(None)
- def get_user_email_from_cache(user_id: int):
- email = cache.get(f"{CACHE_PREFIX}:user_email:{user_id}")
- if email is None or len(email) == 0:
- return None
- return email
- @__try_redis(None)
- def write_user_email_to_cache(user_id: int, email: str):
- cache_name = f"{CACHE_PREFIX}:user_email:{user_id}"
- cache.set(cache_name, email)
- cache.expire(cache_name, CACHE_TIME)
- @__try_redis(None)
- def delete_user_email_from_cache(user_id: int):
- cache.delete(f"{CACHE_PREFIX}:user_email:{user_id}")
- @__try_redis(None)
- def get_role_name_from_cache(role_id: int):
- role_name = cache.get(f"{CACHE_PREFIX}:role_name:{role_id}")
- if role_name is None or len(role_name) == 0:
- return None
- return role_name
- @__try_redis(None)
- def write_role_name_to_cache(role_id: int, name: str):
- cache_name = f"{CACHE_PREFIX}:role_name:{role_id}"
- cache.set(cache_name, name)
- cache.expire(cache_name, CACHE_TIME)
- @__try_redis(None)
- def delete_role_name_from_cache(role_id: int):
- cache.delete(f"{CACHE_PREFIX}:role_name:{role_id}")
- def get_role_operate_from_cache(role_id: int, operate: str):
- res = cache.get(f"{CACHE_PREFIX}:operate:{role_id}:{operate}")
- if res is None or len(res) == 0:
- return None
- return res == "True"
- @__try_redis(None)
- def write_role_operate_to_cache(role_id: int, operate: str, res: bool):
- cache_name = f"{CACHE_PREFIX}:operate:{role_id}:{operate}"
- cache.set(cache_name, str(res))
- cache.expire(cache_name, CACHE_TIME)
- @__try_redis(None)
- def delete_role_operate_from_cache(role_id: int):
- for i in cache.keys(f"{CACHE_PREFIX}:operate:{role_id}:*"):
- cache.delete(i)
- @__try_redis(None)
- def restart_clear_cache():
- """
- 重启服务时必须要清理的缓存
- 包括Hblog-Cache和Flask-Cache
- """
- # 删除全部Flask缓存
- for i in cache.keys("flask_cache:*"):
- cache.delete(i)
|