redis教程和命令
需求:
- 根据对文章的点赞数来计算文章受欢迎程度,假设一篇文章至少需要200个赞才算有趣的文章,有趣的文章要求保留在列表前排至少 1 天
- 对文章进行分组,文章分值排序同样作用与一个组内的文章
思路:
实现文章评分:
因为要实现随时间流逝不断减少的分数,我们可以用文章发布时间来作为文章分数的基数,也就相对于随着时间的流逝文章的分数越低,因为后发布的分数比前发布的分数要高。
根据需求需要超过200个赞的要在前排保留一天,我们可以计算出一个赞是多少分,一天的秒数86400除以200,等于432,也就是每获得一个赞将会的到432分
redis数据结构
存储文章的 hash 结构
数据结构 以文章 1 为例
字段 | 值 | 备注 |
---|---|---|
key | article:1 | redis的key |
value | redis的值,值的结构如下 | |
标题 | title | learn redis |
作者 | poster | echo-ding |
发布时间 | time | 123456789 |
投票数 | votes | 12 |
根据发布时间排序文章的有序集合 zset
字段 | 值 | 备注 |
---|---|---|
key | time: | redis的key |
value | redis的值,值的结构如下 | |
article:1 | 123456789 | |
article:2 | 123456666 |
根据文章评分排序文章的有序集合 zset
字段 | 值 | 备注 |
---|---|---|
key | score: | redis的key |
value | redis的值,值的结构如下 | |
article:1 | 123456789+432 | |
article:2 | 123456666+432 |
记录文章投票人的集合 set
以文章 1 为例
字段 | 值 | 备注 |
---|---|---|
key | voted:1 | redis的key |
value | redis的值,值的结构如下 | |
user:1 |
文章分组,记录一个组内的文章 set
以programming组为例
字段 | 值 | 备注 |
---|---|---|
key | group:programming | redis的key |
value | redis的值,值的结构如下 | |
article:1 |
代码
|
|
参考 [redis实战 Josiah L. Carlson 著 人民邮电出版社]