123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- # **************************************************************************
- # Copyright © 2017 jianglin
- # File Name: count.py
- # Author: jianglin
- # Email: xiyang0807@gmail.com
- # Created: 2017-03-29 21:28:52 (CST)
- # Last Update:星期日 2017-4-2 15:24:37 (CST)
- # By:
- # Description: 一些统计信息
- # **************************************************************************
- from flask import request
- from .extension import redis_data
- class Count(object):
- @classmethod
- def board_topic_count(cls, boardId, value=None):
- key = 'count:board:%s' % str(boardId)
- if value is not None:
- pipe = redis_data.pipeline()
- pipe.hincrby(key, 'topic', value)
- pipe.execute()
- return redis_data.hget(key, 'topic') or 0
- @classmethod
- def board_post_count(cls, boardId, value=None):
- key = 'count:board:%s' % str(boardId)
- if value is not None:
- pipe = redis_data.pipeline()
- pipe.hincrby(key, 'post', value)
- pipe.execute()
- return redis_data.hget(key, 'post') or 0
- @classmethod
- def topic_reply_count(cls, topicId, value=None):
- key = 'count:topic:%s' % str(topicId)
- if value is not None:
- pipe = redis_data.pipeline()
- pipe.hincrby(key, 'replies', value)
- pipe.execute()
- return redis_data.hget(key, 'replies') or 0
- @classmethod
- def topic_read_count(cls, topicId, value=None):
- key = 'count:topic:%s' % str(topicId)
- expire_key = 'expire:topic:read:{}'.format(request.remote_addr)
- if not redis_data.exists(expire_key):
- # 设置三分钟之内,阅读次数不增加
- redis_data.set(expire_key, '1')
- redis_data.expire(expire_key, 180)
- if value is not None:
- redis_data.hincrby(key, 'read', value)
- return redis_data.hget(key, 'read') or 0
- @classmethod
- def reply_liker_count(cls, replyId, value=None):
- key = 'count:reply:%s' % str(replyId)
- if value is not None:
- pipe = redis_data.pipeline()
- pipe.hincrby(key, 'liker', value)
- pipe.execute()
- return redis_data.hget(key, 'liker') or 0
- @classmethod
- def user_topic_count(cls, userId, value=None):
- key = 'count:user:%s' % str(userId)
- if value is not None:
- pipe = redis_data.pipeline()
- pipe.hincrby(key, 'topic', value)
- pipe.execute()
- cls.forums_post_count(1)
- cls.forums_topic_count(1)
- return redis_data.hget(key, 'topic') or 0
- @classmethod
- def user_reply_count(cls, userId, value=None):
- key = 'count:user:%s' % str(userId)
- if value is not None:
- pipe = redis_data.pipeline()
- pipe.hincrby(key, 'replies', value)
- pipe.execute()
- cls.forums_post_count(1)
- return redis_data.hget(key, 'replies') or 0
- @classmethod
- def user_message_count(cls, userId, value=None, clear=False):
- key = 'count:user:%s' % str(userId)
- if value is not None:
- pipe = redis_data.pipeline()
- pipe.hincrby(key, 'message', value)
- pipe.execute()
- if clear:
- redis_data.hset(key, 'message', 0)
- return redis_data.hget(key, 'message') or 0
- @classmethod
- def user_email_time(cls, userId, value=None):
- key = 'count:user:%s' % str(userId)
- if value is not None:
- redis_data.hset(key, 'email', value)
- return redis_data.hget(key, 'email') or '2015-1-1 1:1:1'
- @classmethod
- def forums_user_count(cls, value=None):
- key = 'count:forums'
- if value is not None:
- redis_data.hincrby(key, 'user', value)
- return redis_data.hget(key, 'user') or 0
- @classmethod
- def forums_topic_count(cls, value=None):
- key = 'count:forums'
- if value is not None:
- redis_data.hincrby(key, 'topic', value)
- return redis_data.hget(key, 'topic') or 0
- @classmethod
- def forums_post_count(cls, value=None):
- key = 'count:forums'
- if value is not None:
- redis_data.hincrby(key, 'post', value)
- return redis_data.hget(key, 'post') or 0
|