36 views
# Showlist 设计 [Showlist 优化需求 1.0 PRD](https://bp-doc.atcloudbox.com/s/hC8CESC1z) [Showlist 需求 PRD](https://bp-doc.atcloudbox.com/IOLv9dn5SsCQmFhOxXrdsA) - 在 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 ); ```