zoukankan      html  css  js  c++  java
  • 统计数据持久化

    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)
    

    Redis Zscore 命令返回有序集中,成员的分数值。 如果成员元素不是有序集 key 的成员,或 key 不存在,返回 nil 。

    Redis Zincrby命令对有序集合中指定成员的分数加上增量 increment
    可以通过传递一个负数值 increment ,让分数减去相应的值,比如 ZINCRBY key -5 member ,就是让 member 的 score 值减去 5 。

    3. 统计基类的设计

  • 相关阅读:
    net事件丢失解决方法
    Google排名经验谈
    动力漏洞
    Understand简明参考
    修复iReaper
    Bootstrap源码分析
    UTF8编码字节流错误小析
    OAuth2学习及DotNetOpenAuth部分源码研究
    DynamicModuleUtility对象在.net不同版本下的兼容性问题
    MediaWiKi简明安装与配置笔记
  • 原文地址:https://www.cnblogs.com/oklizz/p/11431569.html
Copyright © 2011-2022 走看看