design.md
2.42 KB
新潮教室
Redis设计
记录用户连续签到的天数。
用户签到成功之后,需要设置这个值。 key过期时间是当天时间到第二天零点,例如,当前设置时间为 2016-04-01 17:48
, 则失效时间为2016-04-03 00:01
Key Value结构: KEY: <UID>, Value: NUMBER
, 例如 checkedDays:10623456-->6
表示10623456
已经连续签到6天。
记录用户当天是否签到。
用户签到成功之后,需要设置这个值。key过期时间:当天时间到今晚零点, 例如,设置时间为 2016-04-01 17:48
, 则失效时间为2016-04-02 00:01
Key Value结构: KEY: <UID>, Value: Y or N
, 例如 10623456-->Y
表示10623456
当天已经签到。
记录用户签到记录。
缓存用户的签到记录。失效时间:60分钟。查询的时候,从数据库中获取,然后写入到缓存中。用户签到之后,删除缓存
LIST结构: KEY: <UID> , Value: [2015-03-12 18:12:12, 2015-03-13 18:12:12 ]
所有用户的亲密度信息。
不失效。 用户签到成功,修改了亲密度之后,添加element。
SortedSet接口, KEY: STAR_ORDER, Value: { <UID>--> 亲密度信息+LAST-UPDATE-TIME}
表设计
Table: user_star_intimacy 用户-亲密度表
列名 | 说明 |
---|---|
uid | 用户ID, 主键 |
star_id | 明星 ID |
num | 亲密度(int) |
create_time | 创建时间 |
update_time | 更新时间,格式为int (到现在的秒数) |
Table: user_star_intimacy_log 用户-签到记录表。 签到成功之后,添加记录
列名 | 说明 |
---|---|
id | 自增主键 |
uid | 用户ID , 索引 |
star_id | 明星 ID |
type | 1. 签到 2. 转发 |
add_num | 本次增加的分数 |
create_time | 签到(转发)时间,格式为int (到现在的秒数) |
流程
签到
插入到签到记录表--> 计算应该新增的亲密度--> 修改用户亲密度表,添加亲密度 --》缓存修改(见下图)
查询亲密度前3名
所有用户的亲密度信息Cache中取前3个
获取我的亲密度排名
用 uid,与明星 ID --> 从 所有用户的亲密度信息
Cache 中找出Element的rank(ZRANK)