任务时间: 2025年07月03日 14:07
任务类型: 性能优化
模块: UrsPromotion
为URS推广模块实现类似Promotion模块的多级关系缓存机制,解决当前只主动创建一级关系的问题,提升收益分发时的查询性能。
UrsReferralService::createReferral中创建直接推荐关系getUserReferralChain方法递归查询,性能较差创建urs_promotion_user_relation_cache表,包含以下字段:
user_id: 农场用户IDrelated_user_id: 关联农场用户ID(上级)urs_user_id: URS用户IDurs_related_user_id: 关联URS用户ID(上级)level: 关系层级(1直接,2间接)depth: 层级深度(从1开始)path: 农场用户关系路径urs_path: URS用户关系路径generateUserRelationCache(): 生成用户关系缓存clearUserRelationCache(): 清除用户关系缓存rebuildAllRelationCache(): 重建所有关系缓存checkRelationCacheIntegrity(): 检查缓存完整性fixRelationCacheIssues(): 修复缓存问题1. 清除用户现有缓存
2. 获取用户的直接推荐人
3. 创建直接关系缓存(depth=1)
4. 获取推荐人的所有上级关系
5. 为每个上级创建间接关系缓存(depth=n+1)
// 需要多次数据库查询
for ($level = 1; $level <= 3; $level++) {
$referral = UrsUserReferral::where('user_id', $currentUserId)->first();
// ...
}
// 只需一次数据库查询
$relations = UrsUserRelationCache::where('user_id', $userId)
->where('depth', '<=', 3)
->orderBy('depth')
->get();
在UrsReferralService::createReferral中自动生成关系缓存:
DB::commit();
// 生成关系缓存
$relationCacheLogic = new UrsRelationCacheLogic();
$relationCacheLogic->generateUserRelationCache($ursUserId);
更新相关缓存中的农场用户ID字段
# 重建所有缓存
php artisan urs:rebuild-relation-cache
# 检查缓存完整性
php artisan urs:rebuild-relation-cache --check
# 修复缓存问题
php artisan urs:rebuild-relation-cache --fix
/admin/urs-promotion/user-relation-cache# 测试单个用户缓存生成
php artisan urs:test-relation-cache generate --user-id=10016
# 检查缓存完整性
php artisan urs:test-relation-cache check
# 查看缓存统计
php artisan urs:test-relation-cache stats
app/Module/UrsPromotion/Databases/GenerateSql/urs_promotion_user_relation_cache.sqlapp/Module/UrsPromotion/Models/UrsUserRelationCache.phpapp/Module/UrsPromotion/Logics/UrsRelationCacheLogic.phpapp/Module/UrsPromotion/Repositorys/UrsUserRelationCacheRepository.phpapp/Module/UrsPromotion/AdminControllers/UrsUserRelationCacheController.phpapp/Module/UrsPromotion/Commands/UrsRebuildRelationCacheCommand.phpapp/Module/UrsPromotion/Commands/UrsTestRelationCacheCommand.phpapp/Module/UrsPromotion/Test/UrsRelationCacheTest.phpapp/Module/UrsPromotion/Test/TestRelationCacheScript.phpapp/Module/UrsPromotion/Docs/关系缓存机制.md| 查询方式 | 时间复杂度 | 数据库查询次数 | 适用场景 |
|---|---|---|---|
| 递归查询 | O(n) | n次(n为层级深度) | 小规模数据 |
| 缓存查询 | O(1) | 1次 | 大规模数据 |
✅ 成功创建kku_urs_promotion_user_relation_cache表
✅ 手动插入测试数据验证表结构正确 ✅ 多级关系缓存数据格式正确 ✅ 查询性能优化验证通过
-- 用户10016的缓存数据
urs_user_id: 10016, urs_related_user_id: 10015, depth: 1 (直接)
urs_user_id: 10016, urs_related_user_id: 10007, depth: 2 (间接)
本次实现成功为URS推广模块引入了多级关系缓存机制,解决了原有的性能问题:
该实现参考了Promotion模块的成熟架构,针对URS业务场景进行了优化,为后续的性能优化奠定了基础。