@@ -3,6 +3,7 @@ package controller
3
3
import (
4
4
"context"
5
5
"fmt"
6
+ "gateway-center/cache"
6
7
"gateway-center/grpcClient"
7
8
"gateway-center/pkg/e"
8
9
baseResponse "gateway-center/response"
@@ -12,6 +13,7 @@ import (
12
13
"mime/multipart"
13
14
"net/http"
14
15
"strconv"
16
+ "time"
15
17
)
16
18
17
19
// PublishAction 视频投稿
@@ -78,10 +80,54 @@ func PublishAction(c *gin.Context) {
78
80
c .JSON (http .StatusOK , baseResponse.PublishListResponse {
79
81
VBResponse : baseResponse.VBResponse {StatusCode : e .Success , StatusMsg : e .GetMsg (e .Success )},
80
82
})
83
+ //投稿成功之后重新查询用户投稿列表,更新缓存
84
+ //先删除Key
85
+ token := grpcClient .ValidateToken (params .Token )
86
+ var PLKey = fmt .Sprintf ("PersonVideoList:%d" , token )
87
+ cache .RedisDeleteKey (context .Background (), PLKey )
88
+ var videoList baseResponse.VideoArray
89
+ //调用grpc
90
+ videos , err := grpcClient .PublishList (context .Background (), & pb.DouyinPublishListRequest {
91
+ UserId : token ,
92
+ Token : params .Token ,
93
+ })
94
+ if err != nil {
95
+ return
96
+ }
97
+ for _ , video := range videos {
98
+ info , err2 := grpcClient .GetUserById (context .Background (), uint (video .Author .Id ), uint (video .Author .Id ), params .Token )
99
+ if err2 != nil {
100
+ util .LogrusObj .Errorf ("gRPC getUserInfo Error userId:%d" , video .Author .Id )
101
+ continue
102
+ }
103
+ user := baseResponse.Vuser {
104
+ Id : info .User .Id ,
105
+ Name : info .User .Name ,
106
+ FollowerCount : info .User .FollowerCount ,
107
+ FollowCount : info .User .FollowCount ,
108
+ IsFollow : false ,
109
+ }
110
+ v := baseResponse.Video {
111
+ Id : video .Id ,
112
+ User : user ,
113
+ CoverUrl : video .CoverUrl ,
114
+ PlayUrl : video .PlayUrl ,
115
+ FavoriteCount : video .FavoriteCount ,
116
+ CommentCount : video .CommentCount ,
117
+ IsFavorite : video .IsFavorite ,
118
+ Title : video .Title ,
119
+ }
120
+ videoList = append (videoList , v )
121
+ }
122
+ err2 = cache .RedisSetPublishListVideoList (context .Background (), PLKey , videoList )
123
+ if err2 != nil {
124
+ util .LogrusObj .Errorf ("Cache Error Set PublishList Key:%s error ErrMSG:%s" , PLKey , err2 .Error ())
125
+ }
81
126
}
82
127
83
128
// PublishList 获取用户投稿列
84
129
func PublishList (c * gin.Context ) {
130
+
85
131
var params baseResponse.PublishListParam
86
132
if err := c .ShouldBindQuery (& params ); err != nil {
87
133
convertErr := e .ConvertErr (err )
@@ -98,6 +144,9 @@ func PublishList(c *gin.Context) {
98
144
})
99
145
return
100
146
}
147
+ //RedisKey
148
+ var PLKey = fmt .Sprintf ("PersonVideoList:%d" , params .UserId )
149
+ videoList := baseResponse.VideoArray {}
101
150
_ , err2 := util .ParseToken (params .Token )
102
151
if err2 != nil {
103
152
util .LogrusObj .Errorf ("Token验证失败 URL:%s Token:%s UserId:%d" , c .Request .RequestURI , params .Token , params .UserId )
@@ -106,6 +155,15 @@ func PublishList(c *gin.Context) {
106
155
})
107
156
return
108
157
}
158
+ videoList , err2 = cache .RedisGetPublishListVideoList (context .Background (), PLKey )
159
+ if err2 == nil { //获取成功,直接返回结果
160
+ c .JSON (http .StatusOK , baseResponse.PublishListResponse {
161
+ VBResponse : baseResponse.VBResponse {StatusCode : e .Success , StatusMsg : e .GetMsg (e .Success )},
162
+ VideoList : videoList ,
163
+ })
164
+ return
165
+ }
166
+ //获取失败,调用grpc
109
167
videos , err := grpcClient .PublishList (context .Background (), & pb.DouyinPublishListRequest {
110
168
UserId : params .UserId ,
111
169
Token : params .Token ,
@@ -118,7 +176,6 @@ func PublishList(c *gin.Context) {
118
176
})
119
177
return
120
178
}
121
- videoList := baseResponse.VideoArray {}
122
179
for _ , video := range videos {
123
180
info , err2 := grpcClient .GetUserById (context .Background (), uint (video .Author .Id ), uint (video .Author .Id ), params .Token )
124
181
if err2 != nil {
@@ -148,6 +205,10 @@ func PublishList(c *gin.Context) {
148
205
VBResponse : baseResponse.VBResponse {StatusCode : e .Success , StatusMsg : e .GetMsg (e .Success )},
149
206
VideoList : videoList ,
150
207
})
208
+ err2 = cache .RedisSetPublishListVideoList (context .Background (), PLKey , videoList )
209
+ if err2 != nil {
210
+ util .LogrusObj .Errorf ("Cache Error Set PublishList Key:%s error ErrMSG:%s" , PLKey , err2 .Error ())
211
+ }
151
212
}
152
213
153
214
// Feed Feed流
@@ -168,7 +229,17 @@ func Feed(c *gin.Context) {
168
229
if userId != - 1 {
169
230
isLogin = true
170
231
}
232
+ var FeedKey = fmt .Sprintf ("FeedCache:latest_time:%dUserId:%s" , params .LatestTime , userId )
171
233
fmt .Printf ("LatestTime: %d, Token: %s\n " , params .LatestTime , params .Token )
234
+ VideoList , err := cache .RedisGetFeedVideoList (context .Background (), FeedKey )
235
+ if err == nil { //找到数据,则返回
236
+ c .JSON (http .StatusOK , baseResponse.FeedResponse {
237
+ VBResponse : baseResponse.VBResponse {StatusCode : e .Success , StatusMsg : e .GetMsg (e .Success )},
238
+ VideoList : VideoList ,
239
+ NextTime : time .Now ().Unix (),
240
+ })
241
+ return
242
+ }
172
243
videos , nextTime , err := grpcClient .Feed (context .Background (), & pb.DouyinFeedRequest {
173
244
Token : & params .Token ,
174
245
LatestTime : & params .LatestTime ,
@@ -181,7 +252,7 @@ func Feed(c *gin.Context) {
181
252
})
182
253
return
183
254
}
184
- VideoList := baseResponse. VideoArray {}
255
+
185
256
for _ , video := range videos {
186
257
var info * pb.DouyinUserResponse
187
258
if isLogin {
@@ -225,6 +296,10 @@ func Feed(c *gin.Context) {
225
296
VideoList : VideoList ,
226
297
NextTime : nextTime ,
227
298
})
299
+ err = cache .RedisSetFeedVideoList (context .Background (), FeedKey , VideoList )
300
+ if err != nil {
301
+ util .LogrusObj .Errorf ("Cache Error Set PublishList Key:%s error ErrMSG:%s" , FeedKey , err .Error ())
302
+ }
228
303
}
229
304
230
305
// FavoriteParam 点赞请求参数
0 commit comments