|
@@ -3,7 +3,11 @@ package com.tzld.piaoquan.recommend.server.service;
|
|
|
import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
|
|
|
import com.google.common.base.Stopwatch;
|
|
|
import com.google.common.base.Strings;
|
|
|
+import com.google.common.cache.CacheBuilder;
|
|
|
+import com.google.common.cache.CacheLoader;
|
|
|
+import com.google.common.cache.LoadingCache;
|
|
|
import com.google.common.reflect.TypeToken;
|
|
|
+import com.tzld.piaoquan.recommend.server.common.RedisKeyConstants;
|
|
|
import com.tzld.piaoquan.recommend.server.common.base.Constant;
|
|
|
import com.tzld.piaoquan.recommend.server.gen.common.Result;
|
|
|
import com.tzld.piaoquan.recommend.server.gen.recommend.*;
|
|
@@ -96,8 +100,32 @@ public class RecommendService {
|
|
|
|
|
|
private ThreadLocal<Map<String, Object>> timerLogMapTL = ThreadLocal.withInitial(HashMap::new);
|
|
|
|
|
|
+ @Value("${risk.video.filter.switch:true}")
|
|
|
+ private boolean riskVideoFilterSwitch;
|
|
|
+ @ApolloJsonValue("${risk.scene:[]}")
|
|
|
+ private Set<String> riskScenes;
|
|
|
+
|
|
|
+ private LoadingCache<String, Set<String>> riskUserCache = CacheBuilder.newBuilder()
|
|
|
+ .maximumSize(5)
|
|
|
+ .refreshAfterWrite(300, TimeUnit.SECONDS)
|
|
|
+ .expireAfterWrite(300, TimeUnit.SECONDS)
|
|
|
+ .expireAfterAccess(300, TimeUnit.SECONDS)
|
|
|
+ .build(new CacheLoader<String, Set<String>>() {
|
|
|
+ @Override
|
|
|
+ public Set<String> load(String key) {
|
|
|
+ Set<String> result = redisTemplate.opsForSet().members(key);
|
|
|
+ if (CollectionUtils.isEmpty(result)) {
|
|
|
+ return Collections.emptySet();
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
@PostConstruct
|
|
|
public void init() {
|
|
|
+ Set<String> data1 = riskUserCache.getUnchecked(RedisKeyConstants.Recommend.riskUserUid);
|
|
|
+ Set<String> data2 = riskUserCache.getUnchecked(RedisKeyConstants.Recommend.riskUserMid);
|
|
|
+ log.info("riskUserCache uid size {} mid size {}", data1.size(), data2.size());
|
|
|
}
|
|
|
|
|
|
public RecommendResponse homepageRecommend(RecommendRequest request) {
|
|
@@ -390,52 +418,13 @@ public class RecommendService {
|
|
|
param.setLastDigit(lastDigit);
|
|
|
|
|
|
// 风险过滤
|
|
|
- List<String> keysRisk = new ArrayList<>();
|
|
|
- keysRisk.add("RISK_SHIELD_FILTER_RULE_V1_JSON");
|
|
|
- keysRisk.add("RISK_SHIELD_FILTER_VIDEO_V1_STR");
|
|
|
- keysRisk.add("RISK_SHIELD_FILTER_EXPANSION_FACTOR_INT");
|
|
|
- keysRisk.add("RISK_SHIELD_FILTER_FLAG_BOOL");
|
|
|
- List<String> valuesRisk = redisTemplate.opsForValue().multiGet(keysRisk);
|
|
|
- String RISK_SHIELD_FILTER_RULE_V1_JSON = "";
|
|
|
- String RISK_SHIELD_FILTER_VIDEO_V1_STR = "";
|
|
|
- String RISK_SHIELD_FILTER_EXPANSION_FACTOR_INT = "";
|
|
|
- String RISK_SHIELD_FILTER_FLAG_BOOL = "";
|
|
|
- if (valuesRisk != null && valuesRisk.size() == 4) {
|
|
|
- RISK_SHIELD_FILTER_RULE_V1_JSON = valuesRisk.get(0);
|
|
|
- RISK_SHIELD_FILTER_VIDEO_V1_STR = valuesRisk.get(1);
|
|
|
- RISK_SHIELD_FILTER_EXPANSION_FACTOR_INT = valuesRisk.get(2);
|
|
|
- RISK_SHIELD_FILTER_FLAG_BOOL = valuesRisk.get(3);
|
|
|
- } else {
|
|
|
- log.error("risk rule read redis is wrong");
|
|
|
- }
|
|
|
- Map<Integer, List<String>> appRegionFiltered = ParserUtils.parseJsonForRiskRule(RISK_SHIELD_FILTER_RULE_V1_JSON);
|
|
|
- List<Long> videosWithRisk = ParserUtils.parseJsonForRiskVideos(RISK_SHIELD_FILTER_VIDEO_V1_STR);
|
|
|
- int expansionFactor = 5;
|
|
|
- if (RISK_SHIELD_FILTER_EXPANSION_FACTOR_INT != null) {
|
|
|
- try {
|
|
|
- expansionFactor = Integer.parseInt(RISK_SHIELD_FILTER_EXPANSION_FACTOR_INT);
|
|
|
- } catch (NumberFormatException e) {
|
|
|
- expansionFactor = 5;
|
|
|
- }
|
|
|
+ if (riskVideoFilterSwitch) {
|
|
|
+ boolean riskUser = riskScenes.contains(param.getHotSceneType())
|
|
|
+ || riskUserCache.getUnchecked(RedisKeyConstants.Recommend.riskUserUid).contains(param.getUid())
|
|
|
+ || riskUserCache.getUnchecked(RedisKeyConstants.Recommend.riskUserMid).contains(param.getMid());
|
|
|
+ param.setRiskUser(riskUser);
|
|
|
}
|
|
|
- // 容灾
|
|
|
- if (expansionFactor < 5) {
|
|
|
- expansionFactor = 5;
|
|
|
- } else if (expansionFactor > 25) {
|
|
|
- expansionFactor = 25;
|
|
|
- }
|
|
|
- Boolean riskFilterFlag = false;
|
|
|
- if (RISK_SHIELD_FILTER_FLAG_BOOL != null) {
|
|
|
- try {
|
|
|
- riskFilterFlag = Boolean.parseBoolean(RISK_SHIELD_FILTER_FLAG_BOOL.toLowerCase());
|
|
|
- } catch (Exception e) {
|
|
|
- riskFilterFlag = false;
|
|
|
- }
|
|
|
- }
|
|
|
- param.setAppRegionFiltered(appRegionFiltered);
|
|
|
- param.setVideosWithRisk(videosWithRisk);
|
|
|
- param.setExpansionFactor(expansionFactor);
|
|
|
- param.setRiskFilterFlag(riskFilterFlag);
|
|
|
+
|
|
|
|
|
|
if (request.hasMachineInfo()) {
|
|
|
MachineInfoProto machineInfoProto = request.getMachineInfo();
|
|
@@ -568,10 +557,7 @@ public class RecommendService {
|
|
|
recallParam.setSize(param.getSize());
|
|
|
recallParam.setUid(param.getUid());
|
|
|
//风险过滤
|
|
|
- recallParam.setExpansionFactor(param.getExpansionFactor());
|
|
|
- recallParam.setRiskFilterFlag(param.getRiskFilterFlag());
|
|
|
- recallParam.setVideosWithRisk(param.getVideosWithRisk());
|
|
|
- recallParam.setAppRegionFiltered(param.getAppRegionFiltered());
|
|
|
+ recallParam.setRiskUser(param.isRiskUser());
|
|
|
recallParam.setAbExpCodes(param.getAbExpCodes());
|
|
|
|
|
|
recallParam.setProvince(param.getProvince());
|