码迷,mamicode.com
首页 > 其他好文 > 详细

Hello Redis - Voting on articles

时间:2016-08-28 22:24:52      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:

Redis in Action JOSIAH L. CARLSON MANNING Shelter Island

 1 ONE_WEEK_IN_SECONDS = 7 * 86400
 2 VOTE_SCORE = 432
 3 
 4 def article_vote(conn, user, article):
 5     cutoff = time.time() - ONE_WEEK_IN_SECONDS
 6     if conn.zscore(‘time:‘, article) < cutoff:
 7         return
 8 
 9     article_id = article.partition(‘:‘)[-1]
10     if conn.sadd(‘voted:‘ + article_id, user):
11         conn.zincrby(‘score:‘, article, VOTE_SCORE)
12         conn.hincrby(article, ‘votes‘, 1)
13 
14 def post_article(conn, user, title, link):
15     article_id = str(conn.incr(‘article:‘))
16 
17     voted = ‘voted:‘ + article_id
18     conn.sadd(voted, user)
19     conn.expire(voted, ONE_WEEK_IN_SECONDS)
20 
21     now = time.time()
22     article = ‘article:‘ + article_id
23     conn.hmset(article, {
24             ‘title‘: title,
25             ‘link‘: link,
26             ‘poster‘: user,
27             ‘timer‘: now,
28             ‘votes‘:1,
29         })
30 
31     conn.zadd(‘score:‘, article, now + VOTE_SCORE)
32     conn.zadd(‘time:‘, article, now)
33 
34     return article_id
35 
36 
37 ARTICLES_PER_PAGE = 25
38 
39 def get_articles(conn, page, order=‘score:‘):
40     start = (page-1) * ARTICLES_PER_PAGE
41     end = start + ARTICLES_PER_PAGE - 1
42 
43     ids = conn.zrevrange(order, start, end)
44     articles = []
45     for id in ids:
46         article_data = conn.hgetall(id)
47         article_data[‘id‘] = id
48         articles.append(article_data)
49 
50     return articles

 

 1 def add_remove_groups(conn, article_id, to_add=[], to_remove=[]):
 2     article = ‘article:‘ + article_id
 3     for group in to_add:
 4         conn.sadd(‘group:‘ + group, article)
 5     for group in to_remove:
 6         conn.srem(‘group:‘ + group, article)
 7 
 8 def get_group_articles(conn, group, page, order=‘score:‘):
 9     key = order + group
10     if not conn.exists(key):
11         conn.zinterstore(key,
12             [‘group:‘ + group, order],
13             aggregate = ‘max‘,
14         )
15         conn.expire(key, 60)
16     return get_articles(conn, page, key)

 

Hello Redis - Voting on articles

标签:

原文地址:http://www.cnblogs.com/yuanjiangw/p/5816079.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!