统计数据持久化

谁说我不能喝 提交于 2019-11-28 22:44:39

1. 统计存储类的设计

"""
用户作品数量的统计类
属性
key redis的键
方法
get 获取数据
update 更新数据
"""
class UserArticleCountStorage:
    """用户作品数量的统计类 count : user : arts    zset   [{ value : 用户id, score:作品数}]"""
    key = 'count:user:arts'
    
    @classmethod
    def get(cls,user_id):
        pass

    @classmethod
    def update(cls, user_id):
        pass

2. 获取和增加数据 (重点)

class BaseCountStorage:
    @classmethod
    def get(cls, user_id):
        """
        获取统计数量
        :param user_id: 用户id
        :return: 统计数量
        """
        # 从redis中取出数据
        redis_slave = current_app.redis_slave  # type: StrictRedis
        try:
            count = redis_slave.zscore(cls.key, user_id)  # 如果有值,返回float类型, 没有返回None
        except RedisError as e:
            current_app.logger.error(e)
            raise e
        # 返回数据
        if count:
            return int(count)
        else:
            return 0

    @classmethod
    def update(cls, user_id, count=1):
        """
        更新统计数量
        :param user_id: 用户id
        :param count: 数量变化 如果要减少 count=-1
        """
        # 对redis数据进行更新
        redis_master = current_app.redis_master  # type: StrictRedis
        try:
            redis_master.zincrby(cls.key, user_id, count)
        except RedisError as e:  # 不处理, 结果mysql和redis的数据不一致
            current_app.logger.error(e)

3. 统计基类的设计

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!