Skip to content

Commit f324b90

Browse files
authored
Merge pull request #35 from OriTsuruHime/develop
添加gin-video的feed、PublishList的缓存
2 parents 8aeb5aa + 24b816e commit f324b90

File tree

5 files changed

+216
-28
lines changed

5 files changed

+216
-28
lines changed

server/gateway-center/cache/init.go

+52
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"fmt"
66
"gateway-center/conf"
7+
"gateway-center/response"
78
"github.com/go-redis/redis/v8"
89
"time"
910
)
@@ -52,3 +53,54 @@ func RedisGetKey(ctx context.Context, key string) (string, error) {
5253
fmt.Printf("Redis client get successfully... %s\n", key)
5354
return value, nil
5455
}
56+
57+
func RedisSetPublishListVideoList(ctx context.Context, key string, videoList response.VideoArray) error {
58+
if _, err := RedisClient.Get(ctx, key).Result(); err != redis.Nil {
59+
fmt.Printf("Key is existed %s\n", key)
60+
}
61+
err := RedisClient.Set(ctx, key, &videoList, 3*time.Minute).Err()
62+
if err != nil {
63+
panic(err)
64+
}
65+
fmt.Printf("Redis client set successfully...%s\n", key)
66+
return nil
67+
}
68+
func RedisGetPublishListVideoList(ctx context.Context, key string) (response.VideoArray, error) {
69+
videos := response.VideoArray{}
70+
err := RedisClient.Get(ctx, key).Scan(&videos)
71+
if err == redis.Nil {
72+
return videos, err
73+
}
74+
if err != nil {
75+
panic(err)
76+
}
77+
fmt.Printf("Redis client get successfully... %s\n", key)
78+
return videos, nil
79+
}
80+
func RedisDeleteKey(ctx context.Context, key string) {
81+
RedisClient.Del(ctx, key)
82+
}
83+
func RedisSetFeedVideoList(ctx context.Context, key string, videoList response.VideoArray) error {
84+
if _, err := RedisClient.Get(ctx, key).Result(); err != redis.Nil {
85+
fmt.Printf("Key is existed %s\n", key)
86+
}
87+
err := RedisClient.Set(ctx, key, &videoList, 3*time.Minute).Err()
88+
if err != nil {
89+
panic(err)
90+
}
91+
fmt.Printf("Redis client set successfully...%s\n", key)
92+
return nil
93+
}
94+
95+
func RedisGetFeedVideoList(ctx context.Context, key string) (response.VideoArray, error) {
96+
videos := response.VideoArray{}
97+
err := RedisClient.Get(ctx, key).Scan(&videos)
98+
if err == redis.Nil {
99+
return videos, err
100+
}
101+
if err != nil {
102+
panic(err)
103+
}
104+
fmt.Printf("Redis client get successfully... %s\n", key)
105+
return videos, nil
106+
}

server/gateway-center/controller/videoController.go

+77-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package controller
33
import (
44
"context"
55
"fmt"
6+
"gateway-center/cache"
67
"gateway-center/grpcClient"
78
"gateway-center/pkg/e"
89
baseResponse "gateway-center/response"
@@ -12,6 +13,7 @@ import (
1213
"mime/multipart"
1314
"net/http"
1415
"strconv"
16+
"time"
1517
)
1618

1719
// PublishAction 视频投稿
@@ -78,10 +80,54 @@ func PublishAction(c *gin.Context) {
7880
c.JSON(http.StatusOK, baseResponse.PublishListResponse{
7981
VBResponse: baseResponse.VBResponse{StatusCode: e.Success, StatusMsg: e.GetMsg(e.Success)},
8082
})
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+
}
81126
}
82127

83128
// PublishList 获取用户投稿列
84129
func PublishList(c *gin.Context) {
130+
85131
var params baseResponse.PublishListParam
86132
if err := c.ShouldBindQuery(&params); err != nil {
87133
convertErr := e.ConvertErr(err)
@@ -98,6 +144,9 @@ func PublishList(c *gin.Context) {
98144
})
99145
return
100146
}
147+
//RedisKey
148+
var PLKey = fmt.Sprintf("PersonVideoList:%d", params.UserId)
149+
videoList := baseResponse.VideoArray{}
101150
_, err2 := util.ParseToken(params.Token)
102151
if err2 != nil {
103152
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) {
106155
})
107156
return
108157
}
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
109167
videos, err := grpcClient.PublishList(context.Background(), &pb.DouyinPublishListRequest{
110168
UserId: params.UserId,
111169
Token: params.Token,
@@ -118,7 +176,6 @@ func PublishList(c *gin.Context) {
118176
})
119177
return
120178
}
121-
videoList := baseResponse.VideoArray{}
122179
for _, video := range videos {
123180
info, err2 := grpcClient.GetUserById(context.Background(), uint(video.Author.Id), uint(video.Author.Id), params.Token)
124181
if err2 != nil {
@@ -148,6 +205,10 @@ func PublishList(c *gin.Context) {
148205
VBResponse: baseResponse.VBResponse{StatusCode: e.Success, StatusMsg: e.GetMsg(e.Success)},
149206
VideoList: videoList,
150207
})
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+
}
151212
}
152213

153214
// Feed Feed流
@@ -168,7 +229,17 @@ func Feed(c *gin.Context) {
168229
if userId != -1 {
169230
isLogin = true
170231
}
232+
var FeedKey = fmt.Sprintf("FeedCache:latest_time:%dUserId:%s", params.LatestTime, userId)
171233
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+
}
172243
videos, nextTime, err := grpcClient.Feed(context.Background(), &pb.DouyinFeedRequest{
173244
Token: &params.Token,
174245
LatestTime: &params.LatestTime,
@@ -181,7 +252,7 @@ func Feed(c *gin.Context) {
181252
})
182253
return
183254
}
184-
VideoList := baseResponse.VideoArray{}
255+
185256
for _, video := range videos {
186257
var info *pb.DouyinUserResponse
187258
if isLogin {
@@ -225,6 +296,10 @@ func Feed(c *gin.Context) {
225296
VideoList: VideoList,
226297
NextTime: nextTime,
227298
})
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+
}
228303
}
229304

230305
// FavoriteParam 点赞请求参数

server/gateway-center/grpcClient/Init.go

+26-26
Original file line numberDiff line numberDiff line change
@@ -50,34 +50,34 @@ func Init() {
5050
}
5151

5252
// 获取 gRPC 服务实例信息
53-
instances, err := nacosClient.SelectOneHealthyInstance(vo.SelectOneHealthInstanceParam{
54-
ServiceName: conf.ChatCenterServiceName,
55-
})
56-
if err != nil {
57-
log.Fatalf("Failed to get chat-service instances: %v", err)
58-
}
59-
60-
conn, err := grpc.Dial(fmt.Sprintf("%s:%d", instances.Ip, instances.Port), grpc.WithTransportCredentials(insecure.NewCredentials()))
61-
if err != nil {
62-
log.Fatalf("connect failed: %v", err)
63-
}
64-
ChatClient = pb.NewDouyinMessageServiceClient(conn)
53+
//instances, err := nacosClient.SelectOneHealthyInstance(vo.SelectOneHealthInstanceParam{
54+
// ServiceName: conf.ChatCenterServiceName,
55+
//})
56+
//if err != nil {
57+
// log.Fatalf("Failed to get chat-service instances: %v", err)
58+
//}
6559
//
66-
// 获取 gRPC 服务实例信息
67-
inst, err := nacosClient.SelectOneHealthyInstance(vo.SelectOneHealthInstanceParam{
68-
ServiceName: conf.UserCenterServiceName,
69-
})
70-
if err != nil {
71-
log.Fatalf("Failed to get chat-service instances: %v", err)
72-
}
73-
74-
Userconn, err := grpc.Dial(fmt.Sprintf("%s:%d", inst.Ip, inst.Port), grpc.WithTransportCredentials(insecure.NewCredentials()))
75-
if err != nil {
76-
log.Fatalf("connect failed: %v", err)
77-
}
78-
UserClient = pb.NewUserServiceClient(Userconn)
60+
//conn, err := grpc.Dial(fmt.Sprintf("%s:%d", instances.Ip, instances.Port), grpc.WithTransportCredentials(insecure.NewCredentials()))
61+
//if err != nil {
62+
// log.Fatalf("connect failed: %v", err)
63+
//}
64+
//ChatClient = pb.NewDouyinMessageServiceClient(conn)
65+
////
66+
//// 获取 gRPC 服务实例信息
67+
//inst, err := nacosClient.SelectOneHealthyInstance(vo.SelectOneHealthInstanceParam{
68+
// ServiceName: conf.UserCenterServiceName,
69+
//})
70+
//if err != nil {
71+
// log.Fatalf("Failed to get chat-service instances: %v", err)
72+
//}
73+
//
74+
//Userconn, err := grpc.Dial(fmt.Sprintf("%s:%d", inst.Ip, inst.Port), grpc.WithTransportCredentials(insecure.NewCredentials()))
75+
//if err != nil {
76+
// log.Fatalf("connect failed: %v", err)
77+
//}
78+
//UserClient = pb.NewUserServiceClient(Userconn)
7979

80-
instances, err = nacosClient.SelectOneHealthyInstance(vo.SelectOneHealthInstanceParam{
80+
instances, err := nacosClient.SelectOneHealthyInstance(vo.SelectOneHealthInstanceParam{
8181
ServiceName: conf.VideoCenterServiceName,
8282
})
8383
if err != nil {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
[error]: 2023/08/28 15:04:07 [Token格式错误 URL:/douyin/publish/list/ Token: UserId:0]
2+
[error]: 2023/08/28 15:38:14 [Token格式错误 URL:/douyin/publish/action/ Token: UserId:0]
+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
[info]: 2023/08/28 14:59:56 [goroutine:UpdateToMySQL is running2023-08-28 14:59:56.0836861 +0800 CST m=+1.379968501]
2+
[info]: 2023/08/28 15:00:50 [FeedRequest Token: lastest_time824637694936:]
3+
[error]: 2023/08/28 15:00:50 [Cache Error Key:favorite:4 ErrorCause:redis: nil]
4+
[error]: 2023/08/28 15:00:50 [Cache Error Key:favorite:3 ErrorCause:redis: nil]
5+
[error]: 2023/08/28 15:00:50 [Cache Error Key:favorite:2 ErrorCause:redis: nil]
6+
[info]: 2023/08/28 15:02:53 [FeedRequest Token: lastest_time824635900712:]
7+
[info]: 2023/08/28 15:02:58 [FeedRequest Token: lastest_time824634820032:]
8+
[info]: 2023/08/28 15:04:24 [PublishListRequest Token:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6NiwidXNlcl9uYW1lIjoib3JpIiwiYXV0aG9yaXR5IjowLCJleHAiOjE2OTM3MzMwNTgsImlzcyI6Inh6In0.jsLfBk7VpZg21QFeAualRoXSCniAtkLM6DRKWvk9M78 UserId6:]
9+
[info]: 2023/08/28 15:04:24 [Token Validated UserId:6]
10+
[error]: 2023/08/28 15:04:24 [Cache Error Key:favorite:2 ErrorCause:redis: nil]
11+
[error]: 2023/08/28 15:04:24 [Cache Error Key:favorite:3 ErrorCause:redis: nil]
12+
[error]: 2023/08/28 15:04:24 [Cache Error Key:favorite:4 ErrorCause:redis: nil]
13+
[info]: 2023/08/28 15:04:24 [Return PublishListResponse]
14+
[info]: 2023/08/28 15:04:46 [PublishListRequest Token:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6NiwidXNlcl9uYW1lIjoib3JpIiwiYXV0aG9yaXR5IjowLCJleHAiOjE2OTM3MzMwNTgsImlzcyI6Inh6In0.jsLfBk7VpZg21QFeAualRoXSCniAtkLM6DRKWvk9M78 UserId6:]
15+
[info]: 2023/08/28 15:04:46 [Token Validated UserId:6]
16+
[error]: 2023/08/28 15:04:46 [Cache Error Key:favorite:2 ErrorCause:redis: nil]
17+
[error]: 2023/08/28 15:04:46 [Cache Error Key:favorite:3 ErrorCause:redis: nil]
18+
[error]: 2023/08/28 15:04:46 [Cache Error Key:favorite:4 ErrorCause:redis: nil]
19+
[info]: 2023/08/28 15:04:46 [Return PublishListResponse]
20+
[info]: 2023/08/28 15:18:08 [goroutine:UpdateToMySQL is running2023-08-28 15:18:08.2612763 +0800 CST m=+1.155993701]
21+
[info]: 2023/08/28 15:18:20 [PublishListRequest Token:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6NiwidXNlcl9uYW1lIjoib3JpIiwiYXV0aG9yaXR5IjowLCJleHAiOjE2OTM3MzMwNTgsImlzcyI6Inh6In0.jsLfBk7VpZg21QFeAualRoXSCniAtkLM6DRKWvk9M78 UserId6:]
22+
[info]: 2023/08/28 15:18:20 [Token Validated UserId:6]
23+
[error]: 2023/08/28 15:18:20 [Cache Error Key:favorite:2 ErrorCause:redis: nil]
24+
[error]: 2023/08/28 15:18:20 [Cache Error Key:favorite:3 ErrorCause:redis: nil]
25+
[error]: 2023/08/28 15:18:20 [Cache Error Key:favorite:4 ErrorCause:redis: nil]
26+
[info]: 2023/08/28 15:18:20 [Return PublishListResponse]
27+
[info]: 2023/08/28 15:20:42 [PublishListRequest Token:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6NiwidXNlcl9uYW1lIjoib3JpIiwiYXV0aG9yaXR5IjowLCJleHAiOjE2OTM3MzMwNTgsImlzcyI6Inh6In0.jsLfBk7VpZg21QFeAualRoXSCniAtkLM6DRKWvk9M78 UserId6:]
28+
[info]: 2023/08/28 15:20:42 [Token Validated UserId:6]
29+
[error]: 2023/08/28 15:20:42 [Cache Error Key:favorite:2 ErrorCause:redis: nil]
30+
[error]: 2023/08/28 15:20:42 [Cache Error Key:favorite:3 ErrorCause:redis: nil]
31+
[error]: 2023/08/28 15:20:42 [Cache Error Key:favorite:4 ErrorCause:redis: nil]
32+
[info]: 2023/08/28 15:20:42 [Return PublishListResponse]
33+
[info]: 2023/08/28 15:21:04 [PublishListRequest Token:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6NiwidXNlcl9uYW1lIjoib3JpIiwiYXV0aG9yaXR5IjowLCJleHAiOjE2OTM3MzMwNTgsImlzcyI6Inh6In0.jsLfBk7VpZg21QFeAualRoXSCniAtkLM6DRKWvk9M78 UserId6:]
34+
[info]: 2023/08/28 15:21:04 [Token Validated UserId:6]
35+
[error]: 2023/08/28 15:21:04 [Cache Error Key:favorite:2 ErrorCause:redis: nil]
36+
[error]: 2023/08/28 15:21:04 [Cache Error Key:favorite:3 ErrorCause:redis: nil]
37+
[error]: 2023/08/28 15:21:04 [Cache Error Key:favorite:4 ErrorCause:redis: nil]
38+
[info]: 2023/08/28 15:21:04 [Return PublishListResponse]
39+
[info]: 2023/08/28 15:21:25 [goroutine:UpdateToMySQL is running2023-08-28 15:21:25.7849282 +0800 CST m=+1.160370301]
40+
[info]: 2023/08/28 15:29:57 [FeedRequest Token: lastest_time824635966144:]
41+
[error]: 2023/08/28 15:29:57 [Cache Error Key:favorite:4 ErrorCause:redis: nil]
42+
[error]: 2023/08/28 15:29:57 [Cache Error Key:favorite:3 ErrorCause:redis: nil]
43+
[error]: 2023/08/28 15:29:58 [Cache Error Key:favorite:2 ErrorCause:redis: nil]
44+
[info]: 2023/08/28 15:38:13 [accept PublishAction Request token:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6NiwidXNlcl9uYW1lIjoib3JpIiwiYXV0aG9yaXR5IjowLCJleHAiOjE2OTM3MzMwNTgsImlzcyI6Inh6In0.jsLfBk7VpZg21QFeAualRoXSCniAtkLM6DRKWvk9M78 title: mov56789]
45+
[info]: 2023/08/28 15:38:14 [generate PlayURL: http://rzhmys0lm.hn-bkt.clouddn.com/public/6/mov56789_fb35f1ad3545974be2e75a4c766f31a9.mp4 AND CoverURL http://rzhmys0lm.hn-bkt.clouddn.com/public/6/mov56789_fb35f1ad3545974be2e75a4c766f31a9.jpg]
46+
[info]: 2023/08/28 15:38:14 [Save Urls into DB]
47+
[info]: 2023/08/28 15:38:14 [return PublishActionResponse]
48+
[info]: 2023/08/28 15:44:18 [accept PublishAction Request token:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6NiwidXNlcl9uYW1lIjoib3JpIiwiYXV0aG9yaXR5IjowLCJleHAiOjE2OTM3MzMwNTgsImlzcyI6Inh6In0.jsLfBk7VpZg21QFeAualRoXSCniAtkLM6DRKWvk9M78 title: mov567899]
49+
[info]: 2023/08/28 15:44:19 [generate PlayURL: http://rzhmys0lm.hn-bkt.clouddn.com/public/6/mov567899_97c87ff92e33742cef5ca407f34273d2.mp4 AND CoverURL http://rzhmys0lm.hn-bkt.clouddn.com/public/6/mov567899_97c87ff92e33742cef5ca407f34273d2.jpg]
50+
[info]: 2023/08/28 15:44:19 [Save Urls into DB]
51+
[info]: 2023/08/28 15:44:19 [return PublishActionResponse]
52+
[info]: 2023/08/28 15:44:19 [PublishListRequest Token:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6NiwidXNlcl9uYW1lIjoib3JpIiwiYXV0aG9yaXR5IjowLCJleHAiOjE2OTM3MzMwNTgsImlzcyI6Inh6In0.jsLfBk7VpZg21QFeAualRoXSCniAtkLM6DRKWvk9M78 UserId6:]
53+
[info]: 2023/08/28 15:44:19 [Token Validated UserId:6]
54+
[error]: 2023/08/28 15:44:19 [Cache Error Key:favorite:2 ErrorCause:redis: nil]
55+
[error]: 2023/08/28 15:44:19 [Cache Error Key:favorite:3 ErrorCause:redis: nil]
56+
[error]: 2023/08/28 15:44:19 [Cache Error Key:favorite:4 ErrorCause:redis: nil]
57+
[error]: 2023/08/28 15:44:19 [Cache Error Key:favorite:26 ErrorCause:redis: nil]
58+
[error]: 2023/08/28 15:44:19 [Cache Error Key:favorite:27 ErrorCause:redis: nil]
59+
[info]: 2023/08/28 15:44:19 [Return PublishListResponse]

0 commit comments

Comments
 (0)