class UserCache(UserMixin): """用户表缓存""" userid: str username: str alternative_id: str homepage: str permissions: list def get_id(self): """使用替代用户ID,当账号信息发生变化时,替代ID更改为新的随机生成的值,确保他们的旧身份验证会话不再有效。""" return self.alternative_id @staticmethod def add_user_cache(alternative_id, **kwargs): """添加user缓存""" user_key = PROJECT_NAME + '-' + str(alternative_id) Redis().hset(user_key, 'alternative_id', str(alternative_id)) for name, value in kwargs.items(): Redis().hset(user_key, name, value) Redis().expire(user_key, SIGNIN_LIFETIME) return True @staticmethod def del_user_cache(alternative_id: str): """删除user缓存""" Redis().delete(PROJECT_NAME + '-' + alternative_id) return True @staticmethod def get_user_cache(alternative_id) -> object: """获取user缓存""" user_cache_dict = Redis(decode_responses=True).hgetall(PROJECT_NAME + '-' + str(alternative_id)) if user_cache_dict: user_cache = UserCache() user_cache.userid = user_cache_dict.get('userid') user_cache.username = user_cache_dict.get('username') user_cache.alternative_id = user_cache_dict.get('alternative_id') user_cache.homepage = user_cache_dict.get('homepage') user_cache.permissions = user_cache_dict.get('permissions').split(",") # redis里存的是字符串,转为列表 print(user_cache.permissions) return user_cache 帮我优化或者提建议,包括命名
时间: 2024-01-27 22:03:11 浏览: 87
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
5星 · 资源好评率100%
首先,对于这个类的命名,建议在类名后面加上一个表示缓存的单词,可以是 `Cache` 或者 `Cacher` 等。比如 `UserCacher` 或 `UserCacheManager`。
其次,在 `add_user_cache` 方法中,`Redis()` 被多次调用,建议只实例化一次并在方法中传递。另外,在循环中多次调用 `Redis().hset`,这样做可能会导致性能问题。建议将要设置的值存储在一个字典中,然后一次性调用 `Redis().hmset` 方法。类似的,`del_user_cache` 方法中也可以重构类似的循环和多次调用 `Redis()` 的问题。
最后,在 `get_user_cache` 方法中,建议使用 `getattr` 函数来从字典中获取属性的值,这样可以避免在字典中没有找到指定的属性时引发 `AttributeError` 异常。另外,由于 `permissions` 可能为空字符串,建议在转换为列表前先进行非空判断。
综上所述,下面是一个经过优化的 `UserCacher` 类的示例代码:
```
class UserCacher(UserMixin):
"""用户表缓存管理"""
userid: str
username: str
alternative_id: str
homepage: str
permissions: list
@staticmethod
def add_user_cache(redis, alternative_id, **kwargs):
"""添加用户缓存"""
user_key = f"{PROJECT_NAME}-{alternative_id}"
values = {"alternative_id": str(alternative_id)}
values.update(kwargs)
redis.hmset(user_key, values)
redis.expire(user_key, SIGNIN_LIFETIME)
return True
@staticmethod
def del_user_cache(redis, alternative_id: str):
"""删除用户缓存"""
redis.delete(f"{PROJECT_NAME}-{alternative_id}")
return True
@staticmethod
def get_user_cache(redis, alternative_id) -> object:
"""获取用户缓存"""
user_cache_dict = redis.hgetall(f"{PROJECT_NAME}-{alternative_id}")
if user_cache_dict:
user_cache = UserCacher()
user_cache.userid = user_cache_dict.get('userid')
user_cache.username = user_cache_dict.get('username')
user_cache.alternative_id = user_cache_dict.get('alternative_id')
user_cache.homepage = user_cache_dict.get('homepage')
user_cache.permissions = user_cache_dict.get('permissions')
if user_cache.permissions:
user_cache.permissions = user_cache.permissions.split(",")
return user_cache
```
希望对你有所帮助!
阅读全文