计算失败报告redis键为空但存在

问题描述 投票:0回答:1

我有一个使用 Laravel lumen 框架的函数:

// Define sample payment transactions
$transactions = [
  ['transaction_id' => 1, 'amount' => 100, 'status' => 'success', 'payment_method' => 'credit_card', 'timestamp' => time()],
  ['transaction_id' => 2, 'amount' => 150, 'status' => 'success', 'payment_method' => 'paypal', 'timestamp' => time()],
  ['transaction_id' => 3, 'amount' => 200, 'status' => 'failed', 'payment_method' => 'credit_card', 'timestamp' => time()],
  ['transaction_id' => 4, 'amount' => 200, 'status' => 'failed', 'payment_method' => 'credit_card', 'timestamp' => time()],
  ['transaction_id' => 5, 'amount' => 200, 'status' => 'failed', 'payment_method' => 'credit_card', 'timestamp' => time()],
];

// Store sample transactions in Redis
foreach ($transactions as $transaction) {
  try {
    Redis::hmset("transaction:{$transaction['transaction_id']}", $transaction);
  } catch (\Exception $e) {
    // Log any errors or exceptions
    \Illuminate\Support\Facades\Log::error("Error storing transaction in Redis: " . $e->getMessage());
  }
}


// Generate report by payment method
// Define payment methods
$paymentMethods = ['credit_card', 'paypal', 'bank_transfer']; // Add more payment methods as needed

// Initialize report array
$report = [];

// Calculate total amount and count for each payment method
foreach ($paymentMethods as $method) {
  $transactions = Redis::keys("transaction:*:payment_method:{$method}"); // on this keys why show an empty 

  // Check if $transactions is an array before counting
  $totalAmount = 0;
  $totalCount = count($transactions);

  foreach ($transactions as $key) {
    $data = Redis::hgetall($key);
    $totalAmount += $data['amount'];
  }


  $report[] = [
    'payment_method' => $method,
    'total_amount' => $totalAmount,
    'total_count' => $totalCount,
  ];
}

return response()->json($report);

我需要处理大部分数据并将数据存储到 Redis,以便我可以使用缓存数据。 我的目标是我只想按付款方式计算报告,但是当我使用 Redis::keys("transaction:*: payment_method:{$method}") 时,该值显示为空。

php redis lumen
1个回答
0
投票

根据您的需求,您需要自己维护一个INDEX。 每次插入后,就可以运行

sadd payment_method:{$transaction['payment_method']} {$transaction['id']}

如果您需要获取统计数据,请运行

smembers payment_method:{$payment_method}

获取所有钥匙 然后运行

hgetall keys

获取所有相关交易

© www.soinside.com 2019 - 2024. All rights reserved.