你需要一个核心数据表来记录裂变关系。以下是一个最小化的MySQL表结构,可以直接在项目中创建。
CREATE TABLE `user_invite_relation` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` varchar(64) NOT NULL COMMENT ‘用户唯一ID’,
`inviter_id` varchar(64) DEFAULT NULL COMMENT ‘邀请人ID,NULL表示无邀请’,
`invite_chain` text COMMENT ‘邀请链,格式:rootID_parentID_currentID’,
`user_tier` tinyint(4) NOT NULL DEFAULT ‘0’ COMMENT ‘用户分层,0-3’,
`direct_invite_count` int(11) NOT NULL DEFAULT ‘0’ COMMENT ‘直接邀请人数’,
`total_invite_count` int(11) NOT NULL DEFAULT ‘0’ COMMENT ‘总邀请人数(下线及下线的下线)’,
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_user_id` (`user_id`),
KEY `idx_inviter_id` (`inviter_id`),
KEY `idx_user_tier` (`user_tier`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=‘用户裂变关系表’;
当用户通过好友分享的链接或邀请码注册时,你的后端注册接口需要执行以下逻辑:
// 伪代码逻辑,以Java Spring Boot为例
@Transactional
public User register(String phone, String inviteCode) {
// 1. 创建用户基础信息
User newUser = userService.create(phone);
// 2. 处理邀请关系
if (inviteCode != null && !inviteCode.isEmpty()) {
// 根据邀请码找到邀请人
User inviter = userService.findByInviteCode(inviteCode);
if (inviter != null) {
// 插入裂变关系记录
UserInviteRelation relation = new UserInviteRelation();
relation.setUserId(newUser.getId());
relation.setInviterId(inviter.getId());
// 构建邀请链:如果邀请人也有上级,则拼接
String inviterChain = inviteRelationDao.getChainByUserId(inviter.getId());
String newChain = (inviterChain == null) ? inviter.getId() : inviterChain + "_" + inviter.getId();
relation.setInviteChain(newChain + "_" + newUser.getId());
inviteRelationDao.insert(relation);
// 3. 更新邀请人的直接邀请数和总邀请数
updateInviteCount(inviter.getId());
// 4. 根据新规则,异步计算并更新用户分层(见下文)
asyncUpdateUserTier(newUser.getId());
}
}
return newUser;
}
分层不是静态的,需要根据用户行为动态更新。以下是四层的具体定义和判定逻辑。
创建一个定时任务(如每30分钟运行一次),更新所有用户的分层。以下是一个SQL更新语句示例,你可以将其放入调度任务中。
-- 更新T0种子用户
UPDATE user_invite_relation r
JOIN user_login_log l ON r.user_id = l.user_id
SET r.user_tier = 0
WHERE r.total_invite_count >= 50
AND l.login_time >= DATE_SUB(NOW(), INTERVAL 7 DAY);
-- 更新T1核心裂变者 (未达到T0标准,但满足T1条件)
UPDATE user_invite_relation r
LEFT JOIN (
SELECT user_id FROM user_invite_relation WHERE user_tier = 0
) t0 ON r.user_id = t0.user_id
SET r.user_tier = 1
WHERE t0.user_id IS NULL
AND (r.total_invite_count >= 20 OR r.direct_invite_count >= 10);
-- 更新T2活跃分享者 (未达到T0/T1标准,但满足T2条件)
UPDATE user_invite_relation r
LEFT JOIN (
SELECT user_id FROM user_invite_relation WHERE user_tier IN (0, 1)
) t01 ON r.user_id = t01.user_id
SET r.user_tier = 2
WHERE t01.user_id IS NULL
AND (r.total_invite_count >= 5 OR r.user_id IN (
SELECT user_id FROM activity_share_log WHERE success = 1 GROUP BY user_id HAVING COUNT() >= 3
));
-- 其余有邀请记录但未达标的,设为T3
UPDATE user_invite_relation
SET user_tier = 3
WHERE user_tier > 3 AND (direct_invite_count > 0 OR total_invite_count > 0);
-- 无任何邀请记录的,保持为初始化状态或设为T3(根据你的业务定义)
分层完成后,关键在于自动化执行差异化的运营动作。

CREATE TABLE `tier_strategy_config` (
`tier` tinyint(4) NOT NULL COMMENT ‘用户分层’,
`strategy_type` varchar(50) NOT NULL COMMENT ‘策略类型:PUSH, COUPON, MISSION, CONTENT’,
`trigger_event` varchar(100) NOT NULL COMMENT ‘触发事件:LOGIN, INVITE_SUCCESS, 7DAY_NO_INVITE’,
`action_detail` json NOT NULL COMMENT ‘动作详情,JSON格式’,
`is_active` tinyint(1) NOT NULL DEFAULT ‘1’
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
向配置表中插入以下数据,这些是可直接运行的策略。
-- T0用户:登录时,推送专属高级任务和1对1客服入口
INSERT INTO tier_strategy_config (tier, strategy_type, trigger_event, action_detail) VALUES
(0, ‘PUSH’, ‘LOGIN’, ‘{“title”: “专属任务待领取”, “content”: “您有一个高奖励裂变任务,点击查看”, “link”: “/mission/vip”, “badge”: “专属”}’);
-- T1用户:邀请成功3人后,自动发放阶梯奖励券
INSERT INTO tier_strategy_config (tier, strategy_type, trigger_event, action_detail) VALUES
(1, ‘COUPON’, ‘INVITE_SUCCESS_3’, ‘{“coupon_id”: “T1_INVITE_3”, “amount”: “15”, “valid_days”: 7}’);
-- T2用户:7天无邀请行为时,推送低门槛召回任务
INSERT INTO tier_strategy_config (tier, strategy_type, trigger_event, action_detail) VALUES
(2, ‘MISSION’, ‘7DAY_NO_INVITE’, ‘{“mission_id”: “recall_1”, “name”: “分享即可得5元券”, “steps”: 1}’);
-- T3用户:首次登录时,强引导查看邀请教程
INSERT INTO tier_strategy_config (tier, strategy_type, trigger_event, action_detail) VALUES
(3, ‘CONTENT’, ‘FIRST_LOGIN’, ‘{“page”: “/guide/invite”, “popup”: true, “can_skip”: false}’);
编写一个策略执行服务,监听用户行为事件(如登录、邀请成功),并触发相应策略。
@Component
public class TierStrategyExecutor {
@Autowired
private TierStrategyConfigDao configDao;
@Autowired
private PushService pushService;
@Autowired
private CouponService couponService;
@EventListener // 监听登录成功事件
public void onUserLogin(UserLoginEvent event) {
String userId = event.getUserId();
// 1. 获取用户当前分层
Integer userTier = inviteRelationDao.getUserTier(userId);
// 2. 查询该分层下,由LOGIN事件触发的所有活跃策略
List strategies = configDao.findByTierAndTriggerEvent(userTier, “LOGIN”);
// 3. 遍历并执行策略
for (TierStrategyConfig strategy : strategies) {
executeStrategy(userId, strategy);
}
}
private void executeStrategy(String userId, TierStrategyConfig strategy) {
switch (strategy.getStrategyType()) {
case “PUSH”:
JSONObject detail = strategy.getActionDetail();
pushService.send(userId, detail.getString(“title”), detail.getString(“content”), detail.getString(“link”));
break;
case “COUPON”:
couponService.grantCoupon(userId, detail.getString(“coupon_id”));
break;
// ... 其他策略类型的执行逻辑
}
}
}
你需要一个核心看板来监控分层效果。以下SQL用于生成每日分层运营日报。
SELECT
DATE(create_time) as stat_date,
user_tier,
COUNT(DISTINCT user_id) as tier_user_count,
AVG(direct_invite_count) as avg_direct_invite,
SUM(CASE WHEN direct_invite_count > 0 THEN 1 ELSE 0 END) 1.0 / COUNT() as invite_activity_rate,
-- 计算分层裂变系数:总邀请数/该层总人数
SUM(total_invite_count) 1.0 / COUNT(DISTINCT user_id) as tier_k_factor
FROM user_invite_relation
WHERE create_time >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)
GROUP BY stat_date, user_tier
ORDER BY stat_date DESC, user_tier ASC;
将上述查询结果可视化,你需要重点关注两个指标:
invite_activity_rate监控,如果过低,则需要调整对T3用户的引导策略。基于看板数据,迭代你的策略配置。例如,发现T2用户裂变系数低,则在tier_strategy_config表中,为T2用户增加一条“INVITE_SUCCESS_1”触发事件,动作设置为发放一张小额即时优惠券,测试该策略是否能提升其分享动力。
整个系统搭建完毕后,你便拥有了一个能够自动识别高潜力用户、并执行精准运营动作的裂变增长引擎。所有代码与配置均可直接复制到你的项目中使用。
易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图