Showing
1 changed file
with
50 additions
and
4 deletions
@@ -2,14 +2,60 @@ | @@ -2,14 +2,60 @@ | ||
2 | 2 | ||
3 | ### Redis设计 | 3 | ### Redis设计 |
4 | 4 | ||
5 | -1.记录用户连续签到的天数。 | 5 | +1.记录用户连续签到的天数。 Star-User-Checked-Days。 用户签到成功之后,需要设置这个值。 key过期时间是当天时间到第二天零点,例如,设置时间为 `2016-04-01 17:48`, 则失效时间为`2016-04-03 00:01` |
6 | +Key Value结构: `KEY: checkedDays:userId, Value: NUMBER` , 例如 `checkedDays:10623456-->6` 表示`10623456`已经连续签到6天。 | ||
7 | + | ||
8 | +2.记录用户当天是否签到。Star-User-Is-Checked-Today。 用户签到成功之后,需要设置这个值。key过期时间:当天时间到今晚零点, 例如,设置时间为 `2016-04-01 17:48`, 则失效时间为`2016-04-02 00:01` | ||
9 | + | ||
10 | +Key Value结构: `KEY: Star-User-Is-Checked-Today:userId, Value: Y or N` , 例如 `Star-User-Is-Checked-Today:10623456-->Y` 表示`10623456`当天已经签到。 | ||
11 | + | ||
12 | +3.记录用户签到记录。 Star-User-Checkin-Record。 用户缓存用户的签到记录。查询的时候,从数据库中获取,然后写入到缓存中。用户签到之后,删除缓存 | ||
13 | +LIST结构: `KEY: record:userId , Value: [2015-03-12 18:12:12, 2015-03-13 18:12:12 ]` | ||
14 | + | ||
15 | + | ||
16 | +5. 记录用户最近一次签到时间: 缓存用户最近的签到时间。Star-User-Checkin-LastTime 。 用户签到成功之后,需要设置这个值。 失效: 1个月 | ||
17 | +Key Value结构: KEY: UID, Value:LAST-CHECKIN-TIME(最近签到时间(unix 秒数)), 例如:10623456-->143026666 | ||
18 | + | ||
19 | +6. 所有用户的亲密度信息 Star-Cohesion-Order, 不失效 | ||
20 | +SortedSet接口, KEY: CohesionOrder, Value: { <LAST-CHECKIN-TIME:UID>--> 亲密度信息 } | ||
6 | 21 | ||
7 | -Key Value结构: `KEY: checkedDays:userId, Value: NUMBER` , 例如 `checkedDays:10623456-->6` 表示`10623456`已经连续签到6天。 key过期时间是当天时间到第二天零点,例如,设置时间为 `2016-04-01 17:48`, 则失效时间为`2016-04-03 00:01` | ||
8 | 22 | ||
9 | -2.记录用户当天是否签到。 | ||
10 | 23 | ||
11 | -Key Value结构: `KEY: ischecked:userId, Value: Y or N` , 例如 `ischecked:10623456-->Y` 表示`10623456`当天已经签到。key过期时间:当天时间到今晚零点, 例如,设置时间为 `2016-04-01 17:48`, 则失效时间为`2016-04-02 00:01` | ||
12 | 24 | ||
13 | 流程如下: | 25 | 流程如下: |
14 | 26 | ||
15 | ![流程图] (https://www.processon.com/chart_image/56fe49e4e4b0bf3d8fc899b7.png) | 27 | ![流程图] (https://www.processon.com/chart_image/56fe49e4e4b0bf3d8fc899b7.png) |
28 | + | ||
29 | + | ||
30 | +### 表设计 | ||
31 | + | ||
32 | +Table: user_cohesion 用户-亲密度表 | ||
33 | + | ||
34 | +| 列名 | 说明 | | ||
35 | +| :--------- | :------------------- | | ||
36 | +| uid| 用户ID, 主键 | | ||
37 | +| cohesion| 亲密度(int) | | ||
38 | +| last_update| 更新时间,格式为int (到现在的秒数) | | ||
39 | + | ||
40 | + | ||
41 | +Table: user_checkin_record 用户-签到记录表。 签到成功之后,添加记录 | ||
42 | + | ||
43 | +| 列名 | 说明 | | ||
44 | +| :--------- | :------------------- | | ||
45 | +| id| 自增主键| | ||
46 | +| uid| 用户ID , 索引| | ||
47 | +| checkin_time| 签到时间,格式为int (到现在的秒数) | | ||
48 | + | ||
49 | + | ||
50 | +### 流程 | ||
51 | + | ||
52 | +#### 签到 | ||
53 | +插入到签到记录表--> 计算应该新增的亲密度--> 修改用户亲密度表,添加亲密度 -->清楚缓存(Cohesion-Order) | ||
54 | + | ||
55 | +#### 查询亲密度前3名 | ||
56 | +Star-Cohesion-Order缓存中取前3个 | ||
57 | + | ||
58 | +#### 获取我的亲密度排名 | ||
59 | +从缓存中找到用户最近一次签到时间(如果没有,则从数据库user_checkin_record中查找)-->从CohesionOrder中找出Element的order | ||
60 | + | ||
61 | + |
-
Please register or login to post a comment