php、mysql和redis队列实现的点赞功能

浏览:684 发布日期:2017/09/14 分类:功能实现 关键字: php redis 点赞
点赞其实是个很有意思的功能,普通的mysql也可以实现,但是遇到高并发性能上不是很好。目前我觉得比较好的方式是用Redis作缓存来实现,从而减轻数据库的负担。
整个逻辑结构如下图:

redis中有一个post_set的集合记录所有文章ID,每接受到一次请求,就sadd到post_Set。

post_user_like_set_{$PID}集合用来存放该文章下点赞用户的UID。

post_user_like_{$PID}_{$UID}HASH用来存放点赞记录,如点赞状态,点赞时间,更新点赞时间,用户ID,文章ID等。

post_{$counts}_counts用来记录redis中文章的点赞数量,点赞加1,取消点赞减1。

list_post的列表用来存放队列数据。

当客户端触发点赞时把UID和PID发送给服务器。
服务器拿到这两个参数去redis中查询是否有post_user_like_{$PID}_{$UID},有的话得到对象中的状态值反值。没有的话去mysql中查询是否有点赞记录。有的话返回对象中的状态值反值。没有的话,点赞状态为1。redis中有缓存的话,更新缓存,没有的话新增一个post_user_like_{$PID}_{$UID}。
根据得到的点赞状态给post_{$counts}_counts加1或者减1。
将UID添加到post_user_like_set_{$PID}中。
将PID加入队列。并返回文章总点赞数量,和当前用户点赞状态给客户端。
出队脚本运行时。拿到PID遍历post_user_like_set_{$PID},根据里面的UID,拿到点赞数量和post_user_like_{$PID}_{$UID}更新数据到mysql,并销毁redis中的数据。
下载地址(对你还有帮助的话麻烦给个star):https://github.com/wangwenfan/dianzan
评论( 相关
后面还有条评论,点击查看>>