首页 > 【系统设计与优化】文章点赞信息优化

【系统设计与优化】文章点赞信息优化

有文章列表,每次分页(每页10条数据)获取,用户登录时需要检查用户是否已经点过赞。

article:{
    title:String,
    summary:String,
    hasPraised:boolean//是否点过赞
    ...
}

表结构如下:

table article:{//文章表
    id:BIGINT//自增Id
    title:VARCHAR(45)
    ....//其他属性
}

table praise:{//点赞表
    id:BIGINT//自增Id
    article_id:BIGINT//文章Id
    user_id:BIGINT//用户Id
    create_time:DATETIME//创建时间
}

目前是实时查mysql,根据praise表查询用户是否已经点赞
不知道该如何优化提升接口响应速度。

PS:如果使用redis,请注意目前项目不支持redis持久化,只当做缓存使用。


用redis做缓存。

key: userid
value: set(articleid)

用户登录时,查一次redis,如果redis中不存在,则query mysql,并update redis
用户点赞时,insert mysql 同时update redis


对于一个用户查询对某一个article是否点过赞,需要使用到hash,不然就得从集合中进行遍历,效率较低。
建议每个以articleid作为key,数据结构采用hash,hash的key为userId,value直接是1即可。
这样查询时间复杂度是接近O(1),而如果单纯的使用集合的话查询复杂度是O(n)。
至于不能持久化的话,将数据异步同步到mysql即可,保证两边能够同步进行更新即可。mysql用于存储,而redis用于查询,当redis重启的话需要一个程序去将mysql中的数据同步到redis中。


用articleid做key,记录点赞过的用户。

【热门文章】
【热门文章】