Skip to content

Commit d1ba26a

Browse files
committed
调整缓存库的用法
1 parent a0f793e commit d1ba26a

File tree

10 files changed

+1899
-119
lines changed

10 files changed

+1899
-119
lines changed

database/chat.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
"github.com/jerbe/jim/errors"
99
"github.com/jerbe/jim/log"
1010

11-
"github.com/jerbe/jcache"
11+
"github.com/jerbe/jcache/v2"
1212

1313
"go.mongodb.org/mongo-driver/bson"
1414
"go.mongodb.org/mongo-driver/bson/primitive"
@@ -277,7 +277,7 @@ func AddChatMessage(msg *ChatMessage) error {
277277
// 将聊天数据推送到缓存定长队列中去
278278
// @TODO 暂时这样push,但是这样处理不准确,需要做优化. 因为每个响应的是时长不一样,可能导致顺序不是正确的,甚至是断续的. 如 [1,3,2,4,7,6,5,8,9,11,10,19]
279279
cacheKey := cacheKeyFormatLastMessageList(msg.RoomID, msg.SessionType)
280-
err = GlobCache.LPush(GlobCtx, cacheKey, msg)
280+
err = GlobCache.LPush(GlobCtx, cacheKey, msg).Err()
281281
if err != nil && err.Error() == "WRONGTYPE Operation against a key holding the wrong kind of value" {
282282
GlobCache.Del(GlobCtx, cacheKey)
283283
}
@@ -342,7 +342,7 @@ func AddChatMessageTx(msg *ChatMessage) error {
342342

343343
// 将聊天数据推送到缓存定长队列中去
344344
cacheKey := cacheKeyFormatLastMessageList(msg.RoomID, msg.SessionType)
345-
err = GlobCache.LPush(GlobCtx, cacheKey, msg)
345+
err = GlobCache.LPush(GlobCtx, cacheKey, msg).Err()
346346
if err != nil {
347347
GlobCache.Del(GlobCtx, cacheKey)
348348
log.Error().Err(err).Msgf("推送消息到缓存列表失败:\n %+v", err)
@@ -496,7 +496,7 @@ func GetLastChatMessageList(roomID string, sessionType int, opts ...*GetOptions)
496496

497497
// 如果有使用缓存,则从缓存中获取
498498
if opt.UseCache() {
499-
exists, _ := GlobCache.Exists(GlobCtx, cacheKey)
499+
exists := GlobCache.Exists(GlobCtx, cacheKey).Val()
500500
if exists > 0 {
501501
var messages []*ChatMessage
502502
err := GlobCache.LRangAndScan(GlobCtx, &messages, cacheKey, 0, defaultLastLimit-1)
@@ -523,7 +523,7 @@ func GetLastChatMessageList(roomID string, sessionType int, opts ...*GetOptions)
523523
// @todo 设置缓存为找不到记录
524524

525525
cacheKey := cacheKeyFormatLastMessageList(roomID, sessionType)
526-
if err := GlobCache.SetNX(GlobCtx, cacheKey, nil, jcache.DefaultEmptySetNXDuration); err != nil {
526+
if err := GlobCache.SetNX(GlobCtx, cacheKey, nil, jcache.DefaultEmptySetNXDuration).Err(); err != nil {
527527
log.Error().Err(err).Str("cache_key", cacheKey).Msg("缓存写入失败")
528528
}
529529

@@ -545,10 +545,10 @@ func GetLastChatMessageList(roomID string, sessionType int, opts ...*GetOptions)
545545
pushData = append(pushData, msg)
546546
}
547547

548-
err = GlobCache.LPush(GlobCtx, cacheKey, pushData...)
548+
err = GlobCache.LPush(GlobCtx, cacheKey, pushData...).Err()
549549
if err != nil && err.Error() == "WRONGTYPE Operation against a key holding the wrong kind of value" {
550550
GlobCache.Del(GlobCtx, cacheKey)
551-
err = GlobCache.LPush(GlobCtx, cacheKey, pushData...)
551+
err = GlobCache.LPush(GlobCtx, cacheKey, pushData...).Err()
552552
if err != nil {
553553
log.Warn().Err(err).Msg("缓存插入聊天消息失败")
554554
}

database/database.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import (
88
"github.com/jerbe/jim/config"
99
"github.com/jerbe/jim/errors"
1010

11-
"github.com/jerbe/jcache"
12-
"github.com/jerbe/jcache/driver"
11+
"github.com/jerbe/jcache/v2"
12+
"github.com/jerbe/jcache/v2/driver"
1313

1414
_ "github.com/go-sql-driver/mysql"
1515
"github.com/jmoiron/sqlx"

database/group.go

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
"github.com/jerbe/jim/log"
1313
"github.com/jerbe/jim/utils"
1414

15-
"github.com/jerbe/jcache"
15+
"github.com/jerbe/jcache/v2"
1616

1717
"github.com/jmoiron/sqlx"
1818
)
@@ -102,14 +102,13 @@ func GetGroup(id int64, opts ...*GetOptions) (*Group, error) {
102102
if opt.UseCache() {
103103
cacheKey := cacheKeyFormatGroupID(id)
104104
group := new(Group)
105-
err := GlobCache.CheckAndScan(GlobCtx, group, cacheKey)
106-
if err == nil {
107-
return group, nil
105+
value := GlobCache.Get(GlobCtx, cacheKey)
106+
if value.Err() == nil && value.Val() != "" {
107+
err := value.Scan(group)
108+
return group, err
108109
}
109-
110-
// 如果是空记录,则直接返回找不到
111-
if errors.IsEmptyRecord(err) {
112-
return nil, errors.Wrap(err)
110+
if value.Err() == nil && value.Val() == "" {
111+
return nil, errors.NoRecords
113112
}
114113
}
115114

@@ -121,7 +120,7 @@ func GetGroup(id int64, opts ...*GetOptions) (*Group, error) {
121120
if errors.IsNoRecord(err) {
122121
// 写入缓存,如果key不存在的话
123122
var cacheKey = cacheKeyFormatGroupID(id)
124-
if e := GlobCache.SetNX(GlobCtx, cacheKey, nil, jcache.DefaultEmptySetNXDuration); e != nil {
123+
if e := GlobCache.SetNX(GlobCtx, cacheKey, nil, jcache.DefaultEmptySetNXDuration).Err(); e != nil {
125124
log.Error().Err(e).Str("err_format", fmt.Sprintf("%+v", e)).Str("cache_key", cacheKey).Msg("缓存写入失败")
126125
}
127126
}
@@ -303,9 +302,9 @@ func GetGroupMemberCount(groupID int64, opts ...*GetOptions) (int64, error) {
303302
opt := MergeGetOptions(opts)
304303
if opt.UseCache() {
305304
cacheKey := cacheKeyFormatGroupMembers(groupID)
306-
exists, _ := GlobCache.Exists(GlobCtx, cacheKey)
305+
exists := GlobCache.Exists(GlobCtx, cacheKey).Val()
307306
if exists > 0 {
308-
cnt, err := GlobCache.HLen(GlobCtx, cacheKey)
307+
cnt, err := GlobCache.HLen(GlobCtx, cacheKey).Result()
309308
if err == nil {
310309
return cnt, nil
311310
}
@@ -327,7 +326,7 @@ func GetGroupMemberIDs(groupID int64, opts ...*GetOptions) ([]int64, error) {
327326
var userIDs []int64
328327
if opt.UseCache() {
329328
cacheKey := cacheKeyFormatGroupMembers(groupID)
330-
exists, _ := GlobCache.Exists(GlobCtx, cacheKey)
329+
exists := GlobCache.Exists(GlobCtx, cacheKey).Val()
331330
if exists > 0 {
332331
err := GlobCache.HKeysAndScan(GlobCtx, userIDs, cacheKey)
333332
if err == nil {
@@ -362,9 +361,9 @@ func GetGroupMemberIDsString(groupID int64, opts ...*GetOptions) ([]string, erro
362361
var userIDs []string
363362
if opt.UseCache() {
364363
cacheKey := cacheKeyFormatGroupMembers(groupID)
365-
exists, _ := GlobCache.Exists(GlobCtx, cacheKey)
364+
exists := GlobCache.Exists(GlobCtx, cacheKey).Val()
366365
if exists > 0 {
367-
keys, err := GlobCache.HKeys(GlobCtx, cacheKey)
366+
keys, err := GlobCache.HKeys(GlobCtx, cacheKey).Result()
368367
if err == nil {
369368
return keys, nil
370369
}
@@ -449,7 +448,7 @@ func GetGroupAllMembers(groupID int64, opts ...*GetOptions) ([]*GroupMember, err
449448
gms := make([]*GroupMember, 0)
450449
if opt.UseCache() {
451450
cacheKey := cacheKeyFormatGroupMembers(groupID)
452-
exists, _ := GlobCache.Exists(GlobCtx, cacheKey)
451+
exists := GlobCache.Exists(GlobCtx, cacheKey).Val()
453452
if exists > 0 {
454453
err := GlobCache.HValsAndScan(GlobCtx, gms, cacheKeyFormatGroupMembers(groupID))
455454
if err == nil {
@@ -491,7 +490,7 @@ func GetGroupMembers(groupID int64, memberIDs []int64, opts ...*GetOptions) ([]*
491490
gms := make([]*GroupMember, 0)
492491
if opt.UseCache() {
493492
cacheKey := cacheKeyFormatGroupMembers(groupID)
494-
exists, _ := GlobCache.Exists(GlobCtx, cacheKey)
493+
exists := GlobCache.Exists(GlobCtx, cacheKey).Val()
495494
if exists > 0 {
496495
var memberKeys = make([]string, len(memberIDs))
497496
for i := 0; i < len(memberIDs); i++ {
@@ -542,7 +541,7 @@ func GetGroupMember(groupID, memberID int64, opts ...*GetOptions) (*GroupMember,
542541
member := new(GroupMember)
543542
if opt.UseCache() {
544543
cacheKey := cacheKeyFormatGroupMembers(groupID)
545-
exists, _ := GlobCache.Exists(GlobCtx, cacheKey)
544+
exists := GlobCache.Exists(GlobCtx, cacheKey).Val()
546545
if exists > 0 {
547546
err := GlobCache.HGetAndScan(GlobCtx, member, cacheKeyFormatGroupMembers(groupID), fmt.Sprintf("%d", memberID))
548547
if err == nil {
@@ -561,7 +560,7 @@ func GetGroupMember(groupID, memberID int64, opts ...*GetOptions) (*GroupMember,
561560
if opt.UpdateCache() {
562561
cacheKey := cacheKeyFormatGroupMembers(groupID)
563562

564-
if exists, _ := GlobCache.Exists(GlobCtx, cacheKey); exists > 0 {
563+
if exists := GlobCache.Exists(GlobCtx, cacheKey).Val(); exists > 0 {
565564
GlobCache.HSet(GlobCtx, cacheKey, fmt.Sprintf("%d", memberID), member)
566565
}
567566
}

database/user.go

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111
"github.com/jerbe/jim/log"
1212
"github.com/jerbe/jim/utils"
1313

14-
"github.com/jerbe/jcache"
14+
"github.com/jerbe/jcache/v2"
1515

1616
"github.com/jmoiron/sqlx"
1717
)
@@ -55,16 +55,14 @@ func GetUser(id int64, opts ...*GetOptions) (*User, error) {
5555
if opt.UseCache() {
5656
cacheKey := cacheKeyFormatUserID(id)
5757
var user = new(User)
58-
err := GlobCache.CheckAndScan(GlobCtx, user, cacheKey)
59-
if err == nil {
60-
return user, nil
58+
value := GlobCache.Get(GlobCtx, cacheKey)
59+
if value.Err() == nil && value.Val() != "" {
60+
err := value.Scan(user)
61+
return user, err
6162
}
62-
63-
// 如果有记录,并且记录内容为空,则表示被标记成查询空
64-
if errors.IsEmptyRecord(err) {
65-
return nil, errors.Wrap(err)
63+
if value.Err() == nil && value.Val() == "" {
64+
return nil, errors.NoRecords
6665
}
67-
6866
}
6967

7068
sqlStr := fmt.Sprintf("SELECT `id`,`username`,`password_hash`, `nickname`, `avatar`, `birth_date`, `online_status`, `status`, `created_at`,`updated_at` FROM %s WHERE `id` = ?", TableUsers)
@@ -75,7 +73,7 @@ func GetUser(id int64, opts ...*GetOptions) (*User, error) {
7573
if err == sql.ErrNoRows {
7674
// 写入缓存,如果key不存在的话
7775
var cacheKey = cacheKeyFormatUserID(id)
78-
if err1 := GlobCache.SetNX(GlobCtx, cacheKey, nil, jcache.DefaultEmptySetNXDuration); err1 != nil {
76+
if err1 := GlobCache.SetNX(GlobCtx, cacheKey, nil, jcache.DefaultEmptySetNXDuration).Err(); err1 != nil {
7977
log.Error().Err(err1).Str("cache_key", cacheKey).Msg("缓存写入失败")
8078
}
8179

@@ -98,17 +96,16 @@ func GetUserByUsername(username string, opts ...*GetOptions) (*User, error) {
9896
opt := MergeGetOptions(opts)
9997
if opt.UseCache() {
10098
cacheKey := cacheKeyFormatUsername(username)
101-
exits, _ := GlobCache.Exists(GlobCtx, cacheKey)
99+
exits := GlobCache.Exists(GlobCtx, cacheKey).Val()
102100
if exits > 0 {
103101
user := new(User)
104-
err := GlobCache.CheckAndScan(GlobCtx, user, cacheKey)
105-
if err == nil {
106-
return user, nil
102+
value := GlobCache.Get(GlobCtx, cacheKey)
103+
if value.Err() == nil && value.Val() != "" {
104+
err := value.Scan(user)
105+
return user, err
107106
}
108-
109-
// 如果有记录,并且记录内容为空,则表示被标记成查询空
110-
if errors.IsEmptyRecord(err) {
111-
return nil, errors.Wrap(err)
107+
if value.Err() == nil && value.Val() == "" {
108+
return nil, errors.NoRecords
112109
}
113110
}
114111
}
@@ -121,7 +118,7 @@ func GetUserByUsername(username string, opts ...*GetOptions) (*User, error) {
121118
if err == sql.ErrNoRows {
122119
// 写入缓存,如果key不存在的话
123120
cacheKey := cacheKeyFormatUsername(username)
124-
if err1 := GlobCache.SetNX(GlobCtx, cacheKey, nil, jcache.DefaultEmptySetNXDuration); err1 != nil {
121+
if err1 := GlobCache.SetNX(GlobCtx, cacheKey, nil, jcache.DefaultEmptySetNXDuration).Err(); err1 != nil {
125122
log.Error().Err(err1).Str("cache_key", cacheKey).Msg("缓存写入失败")
126123
}
127124
return nil, errors.Wrap(err)

database/user_relation.go

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111
"github.com/jerbe/jim/log"
1212
"github.com/jerbe/jim/utils"
1313

14-
"github.com/jerbe/jcache"
14+
"github.com/jerbe/jcache/v2"
1515

1616
"github.com/jmoiron/sqlx"
1717
)
@@ -215,17 +215,16 @@ func GetUserRelation(id int64, opts ...*GetOptions) (*UserRelation, error) {
215215
opt := MergeGetOptions(opts)
216216
if opt.UseCache() {
217217
cacheKey := cacheKeyFormatUserRelationID(id)
218-
exists, _ := GlobCache.Exists(GlobCtx, cacheKey)
218+
exists := GlobCache.Exists(GlobCtx, cacheKey).Val()
219219
if exists > 0 {
220220
relation := &UserRelation{}
221-
err := GlobCache.CheckAndScan(GlobCtx, relation, cacheKey)
222-
if err == nil {
223-
return relation, nil
221+
value := GlobCache.Get(GlobCtx, cacheKey)
222+
if value.Err() == nil && value.Val() != "" {
223+
err := value.Scan(relation)
224+
return relation, err
224225
}
225-
226-
// 如果有记录,并且记录内容为空,则表示被标记成查询空
227-
if errors.IsEmptyRecord(err) {
228-
return nil, errors.Wrap(err)
226+
if value.Err() == nil && value.Val() == "" {
227+
return nil, errors.NoRecords
229228
}
230229
}
231230
}
@@ -238,7 +237,7 @@ func GetUserRelation(id int64, opts ...*GetOptions) (*UserRelation, error) {
238237
if err == sql.ErrNoRows {
239238
// 写入缓存,如果key不存在的话
240239
var cacheKey = cacheKeyFormatUserRelationID(id)
241-
if err := GlobCache.SetNX(GlobCtx, cacheKey, nil, jcache.DefaultEmptySetNXDuration); err != nil {
240+
if err := GlobCache.SetNX(GlobCtx, cacheKey, nil, jcache.DefaultEmptySetNXDuration).Err(); err != nil {
242241
log.Error().Err(err).Str("cache_key", cacheKey).Msg("缓存写入失败")
243242
}
244243
}
@@ -258,17 +257,16 @@ func GetUserRelationByUsersID(userAID int64, userBID int64, opts ...*GetOptions)
258257
opt := MergeGetOptions(opts)
259258
if opt.UseCache() {
260259
cacheKey := cacheKeyFormatUserRelationUserIDs(userAID, userBID)
261-
exists, _ := GlobCache.Exists(GlobCtx, cacheKey)
260+
exists := GlobCache.Exists(GlobCtx, cacheKey).Val()
262261
if exists > 0 {
263262
relation := &UserRelation{}
264-
err := GlobCache.CheckAndScan(GlobCtx, relation, cacheKey)
265-
if err == nil {
266-
return relation, nil
263+
value := GlobCache.Get(GlobCtx, cacheKey)
264+
if value.Err() == nil && value.Val() != "" {
265+
err := value.Scan(relation)
266+
return relation, err
267267
}
268-
269-
// 如果有记录,并且记录内容为空,则表示被标记成查询空
270-
if errors.IsEmptyRecord(err) {
271-
return nil, errors.Wrap(err)
268+
if value.Err() == nil && value.Val() == "" {
269+
return nil, errors.NoRecords
272270
}
273271
}
274272

@@ -284,7 +282,7 @@ func GetUserRelationByUsersID(userAID int64, userBID int64, opts ...*GetOptions)
284282
if err == sql.ErrNoRows {
285283
// 写入缓存,如果key不存在的话
286284
var cacheKey = cacheKeyFormatUserRelationUserIDs(a, b)
287-
if err := GlobCache.SetNX(GlobCtx, cacheKey, nil, jcache.DefaultEmptySetNXDuration); err != nil {
285+
if err := GlobCache.SetNX(GlobCtx, cacheKey, nil, jcache.DefaultEmptySetNXDuration).Err(); err != nil {
288286
log.Error().Err(err).Str("cache_key", cacheKey).Msg("缓存写入失败")
289287
}
290288
}
@@ -429,12 +427,24 @@ func UpdateUserRelation(filter *UpdateUserRelationFilter, data *UpdateUserRelati
429427
var got bool
430428
if filter.ID > 0 {
431429
got = true
432-
err = GlobCache.CheckAndScan(GlobCtx, relation, cacheKeyFormatUserRelationID(filter.ID))
430+
val := GlobCache.Get(GlobCtx, cacheKeyFormatUserRelationID(filter.ID))
431+
err = val.Err()
432+
if err == nil && val.Val() == "" {
433+
err = errors.NoRecords
434+
} else if err == nil {
435+
err = val.Scan(relation)
436+
}
433437
}
434438

435439
if filter.UserAID > 0 && (!got || err != nil) {
436440
got = true
437-
err = GlobCache.CheckAndScan(GlobCtx, relation, cacheKeyFormatUserRelationUserIDs(filter.UserAID, filter.UserBID))
441+
val := GlobCache.Get(GlobCtx, cacheKeyFormatUserRelationUserIDs(filter.UserAID, filter.UserBID))
442+
err = val.Err()
443+
if err == nil && val.Val() == "" {
444+
err = errors.NoRecords
445+
} else if err == nil {
446+
err = val.Scan(relation)
447+
}
438448
}
439449

440450
if got && err == nil {

0 commit comments

Comments
 (0)