前言
这是阅读《Redis实战》的案例,结合自己项目经历对案例的思考;
参考书本地址为:http://redisinaction.com;
一、需求
- 用户访问文章,不能直接查数据库;
- 每个用户可以对每篇文章点一次赞;
- 文章列表的排序规则为
<发布时间戳+(点赞数*432)>
; - 文章可以加入自定义分组里;
- 分组的排序依然使用排序;
二、用例
- 作者发布文章;
- 访客查询文章详情;
- 访客对每篇文章投票,每篇文章只有7天投票时间;
- 访客查询所有文章列表,默认排序是
<发布时间戳+(点赞数*432)>
; - 作者创建或删除分组;
- 作者把文章放进分组,文章和分组为多对多关系;
- 访客查询分组文章列表,默认排序是
<发布时间戳+(点赞数*432)>
;
三、建模
四、概要设计
1. 文章发布接口post_article()
- 文章写入数据库,得到article_id,假设是92617;
- 创建文章散列,类型hash,key为article:92617,成员对应数据库字段和值;
- 创建文章投票集合,类型set,key为voted:92617,成员为空;本人user_id,如:user:234487;
- 创建默认排序集合,类型zset,key为score:,并将article:92617作为成员写入,分数为创建时间戳;
- 创建时间排序集合,类型zset,key为time:,并将article:92617作为成员写入,分数为创建时间戳;
3. 用户投票接口article_vote(user, article)
- 判断是否投票过期;
2. 文章详情接口get_article(article)
- 拼接key=‘article:’+article.id;
- 从文章散列取得详情;
- 从文章投票集合
3. 文章投票用户列表接口get_article_vote_users(article_id)
4. 所有文章列表接口get_articles()
5. 创建和删除分组接口add_remove_groups()
6. 文章和分组绑定接口post_group_articles()
7. 获取分组中的文章get_group_articles()
8. 数据回写数据库
9. 缓存服务重启,从数据库导入缓存服务器
五、参考代码
https://github.com/huangz1990/riacn-code