观看视频项目记录

28 阅读1分钟

一、点赞

方案一:纯使用数据库

点赞记录表
id bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
user_id bigint NOT NULL COMMENT '用户id',
biz_id bigint NOT NULL COMMENT '业务id',
biz_type VARCHAR(16) NOT NULL COMMENT '业务类型',
create_time' datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT,
update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

优化方案:使用缓存存储(例如redis),定时持久化

点赞记录:使用set集合存储

点赞数量:使用sorted存储 image.png

判断多个key是否存在的优化:批量执行 image.png

//查询点赞状态,集合中返回的是true/false集合
List<object> objects = redisTemplate.executePipelined(new RedisCallback<object>(\) {
@Override
public object doInRedis(RedisConnection connection) throws DataAccessException {
    StringRedisConnection src = (StringRedisConnection) connection;
    for (Long bizId : bizIds) {
    String key = RedisConstants.LIKES_BIZ_KEY_PREFIX + bizId;
    src.sIsMember (key, userId.toString());
    }
return null;
});

二、签到

表设计

id bigint NOT NULL AUTO_INCREMENT,
user_id bigint NOT NULL COMMENT,
year year NOT NULL,
month' tinyint NOT NULL,
date date NOT NULL,
is_backup bit(1) NOT NULL COMMENT '是否补签到',

image.png

image.png

image.png

三、排行榜

积分表表设计

id BIGINT(19) NOT NULL AUTO_INCREMENT COMMENT'积分记录表id',
user_id BIGINT(19) NOT NULL COMMENT '用户id',
type TINYINT(3) NOT NULL COMMENT'积分方式',
points TINYINT(8) NOT NULL COMMENT'积分值',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP

积分表汇总表设计

id BIGINT(19),
user_id BIGINT(19),
points INT comment '积分值',
rank TINYINT comment '名次,只记录赛季前100',
season SMALLINT comment '赛季id'

使用zset集合存储每一个赛季的排行榜,定时将每个赛季的数据同步到数据库当中

ZADD:新增
ZRANGE:从低到高返回成员
ZREVRANGE[with withscores]:从高到低返回成员
ZSCORE:返回指定成员的分数
ZINCRBY:增量更新