我有一个使用 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}") 时,该值显示为空。
根据您的需求,您需要自己维护一个INDEX。 每次插入后,就可以运行
sadd payment_method:{$transaction['payment_method']} {$transaction['id']}
如果您需要获取统计数据,请运行
smembers payment_method:{$payment_method}
获取所有钥匙 然后运行
hgetall keys
获取所有相关交易