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. 统计基类的设计
