Redis之网站文章投票

Posted Sawyer Ford

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis之网站文章投票相关的知识,希望对你有一定的参考价值。

直接上代码:

# python3
# -*- coding: utf-8 -*-

import redis
import time

ONE_WEEK_IN_SECONDS = 7 * 86400
# 如果一篇文章获得200个赞,那么这篇文章就是有趣的
VOTE_SCORE = 86400 / 200

def redis_init(redis):
    # article_time记录文章发布时间
    redis.zadd(article_time, article_100408=1496662197, article_100635=1496669721, article_100716=1496660089)
    # article_score记录文章得分
    redis.zadd(article_score, article_100408=1496666517, article_100635=1496670153, article_100716=1496665705)
    # voted_article_id记录编号为article_id的文章的点赞用户集合
    redis.sadd(voted_100408, user_234487, user_253378, user_364680,
               user_132097, user_350917)
    # 用hash描述每篇文章
    article_desc = {title:kunlun, link:www.kunlun.com, poster:fengge, time:1441728000, votes:523}
    redis.hmset(article_100408, article_desc)
    article_desc = {title: zhuxian, link: www.zhuxian.com, poster: xiaoding, time: 1081440000, votes: 677}
    redis.hmset(article_100635, article_desc)
    article_desc = {title: soushenji, link: www.soushenji.com, poster: shuxiayehu,
                    time: 1187280000, votes: 421}
    redis.hmset(article_100635, article_desc)

def article_note(conn, user, article):
    cutoff = time.time() - ONE_WEEK_IN_SECONDS
    if conn.zscore(article_time, article) < cutoff:
        return

    article_id = article.partition(_)[-1]
    if conn.sadd(voted_ + article_id, user):
        conn.zincrby(article_score, article, VOTE_SCORE)
        conn.hincrby(article, votes, 1)


r = redis.StrictRedis(host=redis_server_ip, port=6379, password=redis_passwd, db=0)
redis_init(r)
article_note(r,use_115423, article_100408)

 

参考资料:

《Redis实战》

以上是关于Redis之网站文章投票的主要内容,如果未能解决你的问题,请参考以下文章

《Redis in Action》笔记文章投票初始化数据 + 投票 + 发布文章

高性能网站架构设计之缓存篇- Redis 集群(中)

Redis主从复制之哨兵模式(sentinel)

Redis构建文章聚合信息分类网站

linux配置系列之redis哨兵配置

使用memcache或redis限制某个用户或者某ip用户一段时间内最大投票次数