Showlist 设计
Showlist 优化需求 1.0 PRDShowlist 需求 PRD
- 在 Console 配置和管理生成 showlist 的规则
- 在 BytePower 根据规则生成 showlist,并提供 get showlist 的接口
存储
showlist
数据存储在 redis 或 room,hash 类型 key:app_id:showlist:#showlist_name# value: list 类型,每一项是一个 json 结构,其中字段包含:
- title
- text
- subtext
- image(图片的 url)
- avatar(头像的 url)
- created
例如:
{
"title": "好消息!好消息!",
"text": "张三 提现了 5 元。",
"subtext": "最终解释权归汉迪所有",
"image": "s3://XXX",
"avatar": "s3://XXX",
"created": "2021-04-18 18:10:10"
}
生成的新数据插入到 list 的尾部,当长度超过规则定义的list_size
时,移除头部的数据,保持 list 长度不大于list_size
key 长期有效
用户的图片和头像放到 S3,请求量大时考虑 CDN
用户信息
从网上搜集的用户信息,模拟真实的用户,存储在数据库
create table if not exists fake_user
(
fake_user_id int not null constraint fake_user_fake_user_id primary key,
user_name varchar,
user_name_en varchar,
real_name varchar,
real_name_en varchar,
phone_number varchar,
email varchar,
image varchar,
avatar varchar
);
接口
根据 showlist 名称获取列表
for client: GET bp/showlist/{showlist_name}?limit=N for server: GET bp/server/showlist/{showlist_name}?limit=N
Response:
{
"showlist": [
{
"title": "好消息!好消息!",
"text": "张三 提现了 5 元。",
"subtext": "最终解释权归汉迪所有",
"image": "s3://XXX",
"avatar": "s3://XXX",
"created": "2021-04-18 10:10:10"
},
{
"title": "好消息!好消息!",
"text": "李四 提现了 1 元。",
"subtext": "最终解释权归汉迪所有",
"image": "s3://XXX",
"avatar": "s3://XXX",
"created": "2021-04-18 10:31:06"
}
],
"max_count": 200,
"available_count": 120, //现有已生成的数据总数
"result_count": 100 //接口调用限制 limit,未限制默认1000
}
获取特定条件的 list
for client: POST bp/showlist/{showlist_name}?limit=N for server: POST bp/server/showlist/{showlist_name}?limit=N
request:
{
"title": ["测试 1","测试 2"],
"text": ["UHJ778NNN"],
"subtext": ["好消息"]
}
将查询结果保存在 redis,失效时间与 showlist 生成的间隔一致,避免缓存无效数据。
key:app_id:showlist:#showlist_name#:#condition_id# value: list 类型,每一项是一个 json 结构,其中字段包含:
- title
- text
- subtext
- image(图片的 url)
- avatar(头像的 url)
- created
将查询条件和结果的 redis key 保存在数据库。
showlist_search
CREATE TABLE showlist_search_result (
id SERIAL NOT NULL PRIMARY KEY,
app_id VARCHAR,
showlist_name VARCHAR,
condition_id VARCHAR,
count INTEGER,
sys_created_time TIMESTAMP WITH TIME ZONE
);