Skip to content

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

京ICP备19011570号-2