mongodb基础操作方法增加redis缓存策略

This commit is contained in:
2025-12-05 09:51:36 +08:00
parent 25452e04b7
commit a78bf2676b

View File

@@ -98,7 +98,6 @@ func Find(ctx context.Context, filter bson.M, result interface{}, collection str
return
}
filter["isDeleted"] = false
filter["tenantId"] = user.TenantId
filterMap := utils.OrderMap(filter)
optsMap := listOptionsToMap(ctx, opts...)
redisKey := fmt.Sprintf(consts.List, user.TenantId, collection, gconv.String(filterMap), gconv.String(optsMap))
@@ -113,6 +112,8 @@ func Find(ctx context.Context, filter bson.M, result interface{}, collection str
}
return
}
filter["tenantId"] = user.TenantId
cur, err := db.Collection(collection).Find(ctx, filter, opts...)
if err != nil {
return
@@ -139,7 +140,6 @@ func FindOne(ctx context.Context, filter bson.M, result interface{}, collection
return
}
filter["isDeleted"] = false
filter["tenantId"] = user.TenantId
filterMap := utils.OrderMap(filter)
optsMap := oneOptionsToMap(ctx, opts...)
redisKey := fmt.Sprintf(consts.One, user.TenantId, collection, gconv.String(filterMap), gconv.String(optsMap))
@@ -154,6 +154,7 @@ func FindOne(ctx context.Context, filter bson.M, result interface{}, collection
}
return
}
filter["tenantId"] = user.TenantId
cur := db.Collection(collection).FindOne(ctx, filter, opts...)
err = cur.Decode(result)
if errors.Is(err, mongo.ErrNoDocuments) {
@@ -165,6 +166,31 @@ func FindOne(ctx context.Context, filter bson.M, result interface{}, collection
}
return
}
func cleanRedis(ctx context.Context, tenantId interface{}, collection string) (err error) {
listKeys := fmt.Sprintf(consts.CleanList, tenantId, collection)
keys, err := redis.RedisClient.Keys(ctx, listKeys)
if err != nil {
return
}
for _, key := range keys {
_, err = redis.RedisClient.Del(ctx, key)
if err != nil {
return
}
}
countKeys := fmt.Sprintf(consts.CleanCount, tenantId, collection)
keys, err = redis.RedisClient.Keys(ctx, countKeys)
if err != nil {
return
}
for _, key := range keys {
_, err = redis.RedisClient.Del(ctx, key)
if err != nil {
return
}
}
return
}
// Delete 删除记录
func Delete(ctx context.Context, filter bson.M, collection string, opts ...options.Lister[options.DeleteManyOptions]) (count int64, err error) {
@@ -182,14 +208,7 @@ func Delete(ctx context.Context, filter bson.M, collection string, opts ...optio
return
}
count = r.DeletedCount
_, err = redis.RedisClient.Del(ctx, fmt.Sprintf(consts.CleanList, user.TenantId, collection))
if err != nil {
return
}
_, err = redis.RedisClient.Del(ctx, fmt.Sprintf(consts.CleanCount, user.TenantId, collection))
if err != nil {
return
}
err = cleanRedis(ctx, user.TenantId, collection)
return
}
@@ -213,14 +232,7 @@ func Update(ctx context.Context, filter bson.M, update bson.M, collection string
if err != nil {
return
}
_, err = redis.RedisClient.Del(ctx, fmt.Sprintf(consts.CleanList, user.TenantId, collection))
if err != nil {
return
}
_, err = redis.RedisClient.Del(ctx, fmt.Sprintf(consts.CleanCount, user.TenantId, collection))
if err != nil {
return
}
err = cleanRedis(ctx, user.TenantId, collection)
return
}
@@ -247,14 +259,7 @@ func Insert(ctx context.Context, documents []interface{}, collection string, opt
return
}
ids = r.InsertedIDs
_, err = redis.RedisClient.Del(ctx, fmt.Sprintf(consts.CleanList, user.TenantId, collection))
if err != nil {
return
}
_, err = redis.RedisClient.Del(ctx, fmt.Sprintf(consts.CleanCount, user.TenantId, collection))
if err != nil {
return
}
err = cleanRedis(ctx, user.TenantId, collection)
return
}