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
);