1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# -*- coding:UTF-8 -*-
# @Time : 2020/9/11 11:28
# @File : func_from_redis_get_portrait.py
# @email : litao@igengmei.com
# @author : litao
import json
import redis
redis_client = redis.StrictRedis.from_url("redis://:ReDis!GmTx*0aN6@172.16.40.133:6379", decode_responses=True)
redis_client2 = redis.StrictRedis.from_url("redis://:ReDis!GmTx*0aN9@172.16.40.173:6379", decode_responses=True)
redis_client3 = redis.StrictRedis.from_url("redis://:ReDis!GmTx*0aN12@172.16.40.164:6379", decode_responses=True)
redis_client4 = redis.StrictRedis.from_url("redis://:XfkMCCdWDIU%ls$h@172.16.50.145:6379", decode_responses=True)
def get_user_portrait_tag3_redis_key(device_id):
return "doris:user_portrait:tag3:device_id:" + str(device_id)
def get_user_portrait_tag3_from_redis(device_id, limit_score=0):
def items_gt_score(d):
new_d = dict(sorted(d.items(), key=lambda x: x[1], reverse=True))
res = {tag: float(score) for tag, score in new_d.items() if float(score) >= limit_score}
return list(res.keys())
portrait_key = get_user_portrait_tag3_redis_key(device_id)
if redis_client2.exists(portrait_key):
user_portrait = json.loads(redis_client2.get(portrait_key))
first_demands = items_gt_score(user_portrait.get("first_demands", {})) # 一级诉求
second_demands = items_gt_score(user_portrait.get("second_demands", {})) # 二级诉求
first_solutions = items_gt_score(user_portrait.get("first_solutions", {})) # 一级方式
second_solutions = items_gt_score(user_portrait.get("second_solutions", {})) # 二级方式
first_positions = items_gt_score(user_portrait.get("first_positions", {})) # 一级部位
second_positions = items_gt_score(user_portrait.get("second_positions", {}))
projects = items_gt_score(user_portrait.get("projects", {})) # 项目
anecdote_tags = items_gt_score(user_portrait.get("anecdote_tags", {})) # 八卦
return {
"first_demands": first_demands,
"second_demands": second_demands,
"first_solutions": first_solutions,
"second_solutions": second_solutions,
"first_positions": first_positions,
"second_positions": second_positions,
"projects": projects,
"anecdote_tags": anecdote_tags
}
return {}
def user_portrait_scan_info():
return_dict = {}
try:
round = 0
all_count = 0
empty_count = 0
just_projects_count = 0
keys = "doris:user_portrait:tag3:device_id:*"
cur, results = redis_client2.scan(0, keys, 3000)
while cur != 0:
round += 1
print("round: " + str(round))
cur, results = redis_client2.scan(cur, keys, 3000)
for key in results:
key = key
device_id = key.split(":")[-1]
all_count += 1
# print(key)
# if user_portrait_is_empty(device_id):
# print(device_id)
# empty_count += 1
# if user_portrait_just_projects(device_id):
# print(device_id)
# just_projects_count += 1
# user_portrait_get_empty_candidates(device_id)
try:
res_dic = get_user_portrait_tag3_from_redis(device_id)
yield res_dic
except:
continue
# for data_list in res_dic:
# for data in data_list:
return return_dict
except Exception as e:
print(e)
return {}
if __name__ == "__main__":
scan_res = user_portrait_scan_info()
for res in scan_res:
print(res)