redis实战(4):发布并获取文章

1 发布文章

发布文章要创建一个id,可以通过计数器counter执行incr命令来完成。接着使用sadd将文章发布者的ID添加到记录文章已投票用户名单的集合里面,并使用expire为该集合设置过期时间(一周)。之后,使用hmset来存储文章相关信息,并执行两个zadd,将文章的初始评分和发布时间分别存入对应的有序集合中;

def post_article(conn,user,titile,link){
	articleId = str(conn.incr("article:")) //生成一个文章ID字符串
	voted =“voted:+ articleId
	// 将发布文章的用户添加到文章已投票哟洪湖名单里
	conn.sadd(voted,user)
	// 设置该名单生命周期为一周
	conn.expire(voted,ONE_WEEK_IN_SECONDS)

	now = time.time()
	artile = "article:" + articleId
	conn.hmset(article,{
		"title":title,
		"link":link,
		"poster":user,
		"time":now,
		"votes":1,
	})
	//将问自己添加到“发布文章有序集合”中
	conn.zadd("score:",article,now + VOTE_SCORE)
	// 将文章添加到 评分的有序集合中
	conn.zadd("time:",article,now)
	return articleId	
}

2 获取文章

如何获取评分最高的文章,如何获取最新的文章?

为了实现上面功能,需要先使用zrevrange命名取出多个文章ID,然后对每个文章id执行一次hgetall取出文章的详细信息,这个方法既可以取出评分最高的,也可以取出最新的文章。需要注意的,有序集合默认分值从小到大排列,所以使用zreveange,按照分值从大到小的取出文章id才是正确的做法

ARTICLE_PRE_PAGE=25

def get_article (conn,page,order="score:"){
	start = (page -1)* ARTICLE_PRE_PAGE
	end = start + ARTICLE_PRE_PAGE -1
	
	ids = conn.zrevrange(order,start,end)
	articles=[]
	for id in ids
		article_data= conn.hgetall(id)
		article_data["id"]=id
		articles.append(article_data)
	return articles
}

相关推荐
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页