大数据平台崛起;靠流量转化收益必然趋势。
// 连接到 Redis 服务器
$redis = new Predis\Client();
// 用户ID
$userID = 123;
// 记录用户在某个日期活跃
function markUserActive($redis, $userID, $date)
{
$redis->setbit("user:$userID:active_dates", $date, 1);
}
// 检查用户在某个日期是否活跃
function isUserActive($redis, $userID, $date)
{
return $redis->getbit("user:$userID:active_dates", $date) == 1;
}
// 计算留存率
function calculateRetentionRate($redis, $endDate, $numOfDays)
{
$activeUsers = 0;
$totalUsers = $redis->hlen("users"); // 假设用户存储在 Redis 的 Hash 中,使用 "users" 键
for ($i = 0; $i < $numOfDays; $i++) {
$date = date('Y-m-d', strtotime("-$i days", strtotime($endDate)));
// 对于每一天,检查用户是否在这一天活跃
foreach ($redis->hkeys("users") as $userID) {
if (isUserActive($redis, $userID, $date)) {
$activeUsers++;
}
}
// 输出每天的留存率
$retentionRate = ($activeUsers / $totalUsers) * 100;
echo "Retention rate on $date: $retentionRate%\n";
$activeUsers = 0; // 重置活跃用户计数
}
}
// 示例:标记用户在某个日期活跃
markUserActive($redis, $userID, '2023-01-01');
// 示例:计算留存率,假设计算最近 7 天的留存率
calculateRetentionRate($redis, '2023-01-07', 7);