Quellcode durchsuchen

fix: 修复redis缓存用户额度不过期的问题

1808837298@qq.com vor 2 Jahren
Ursprung
Commit
5482fff62d
1 geänderte Dateien mit 31 neuen und 2 gelöschten Zeilen
  1. 31 2
      common/redis.go

+ 31 - 2
common/redis.go

@@ -73,6 +73,35 @@ func RedisDel(key string) error {
 }
 
 func RedisDecrease(key string, value int64) error {
-	ctx := context.Background()
-	return RDB.DecrBy(ctx, key, value).Err()
+
+	// 检查键的剩余生存时间
+	ttlCmd := RDB.TTL(context.Background(), key)
+	ttl, err := ttlCmd.Result()
+	if err != nil {
+		// 失败则尝试直接减少
+		return RDB.DecrBy(context.Background(), key, value).Err()
+	}
+
+	// 如果剩余生存时间大于0,则进行减少操作
+	if ttl > 0 {
+		ctx := context.Background()
+		// 开始一个Redis事务
+		txn := RDB.TxPipeline()
+
+		// 减少余额
+		decrCmd := txn.DecrBy(ctx, key, value)
+		if err := decrCmd.Err(); err != nil {
+			return err // 如果减少失败,则直接返回错误
+		}
+
+		// 重新设置过期时间,使用原来的过期时间
+		txn.Expire(ctx, key, ttl)
+
+		// 执行事务
+		_, err = txn.Exec(ctx)
+		return err
+	} else {
+		_ = RedisDel(key)
+	}
+	return nil
 }