基于Redis的点赞功能的设计思想,详细的解决方案

基于Redis的点赞功能的设计思想,详细的解决方案
前言

赞美是一个非常有趣的功能,大致有两种基本的设计思想,一种是MySQL等。

数据库直接存储到地面,而另一个是利用点赞的业务特点扔到Redis(或其他),然后刷回MySQL等。

直接写入MySQL

直接写入MySQL是最简单的方法

制作两张桌子,

1、post_like

要记录文章被表扬的次数,有多少人称赞这种数据可以直接从表格中找到;

2、user_like_post

记录用户所称赞的文章,当文章列表打开时,未被表扬的数据就在里面。

缺点

1。在数据库中读写的压力是巨大的。

热门文章会有很多用户的好评,即使在很短的时间内很多好评,直接从长期的数据库操作是不理想的。

redis存储再批回数据库

Redis的主要特点是速度快,毕竟,主要是数据在内存中。

最主要的原因,我选择redis代替memcache,redis支持更多的数据类型,如哈希,集,zset,等等。

以下类型将具体使用。

优势

1。高性能

2,缓解数据库读写压力。

事实上,我有更多的减轻写作压力,真正阅读的压力,通过MySQL主从甚至对热点数据的增加Redis做缓存,可以解决

写作压力对先前的计划确实不太好。

缺点

1,复杂发展

这比直接MySQL方案复杂得多,有许多地方需要考虑。

2。不能保证数据安全

当redis是挂了,数据丢失和数据在redis是时间不同步,它可以消除当redis内存被替换

但对我们来说,丢失一点数据并不是一个小问题。

具体的设计

MySQL设计

这篇文章与写和写MySQL一样,毕竟,它要存储在地上。

所以同样需要post_like,user_like_post,两表存储点的数量被表扬(统计),和用户点的文章。

这两个表是由post_id和user_id相连,分别。

redis设计部分:

post_set

得到一组存储在redis所有物品已称赞

post_user_like_set_ { $ post_id }

每一个岗位,post_id作为重点,和一组用于存储后点的所有用户。

post_user_like_ { $ post_id } { } _ user_id美元

将每个用户的赞扬点放在散列中的每个帖子上,以及散列字段中。

只要跟进需求处理就可以了。

为什么使用哈希

这仅仅是因为哈希,因为哈希可以用来存储一个赞扬点的对象,该对象对应于数据库的一行记录。

当然,学生会说重点,价值也可以被用来将所有的数据(json_encode,等)

毕竟,把它放在值中。重复序列化也是一个很大的开销。

修改字段方便,序列化和反序列化操作方便。

post_ { } _counter post_id美元

保持各岗位记录点的数量,目前在使用计数器,

在这里,我们只使用计数器记录未同步到MySQL的点的数量(可以是负数),每次

当您返回MySQL时,您将计数器中的数据数和数据库中赞扬的数量添加到数据库中。

订阅者称赞/取消

得到user_id,post_id,询问用户是否已被一点点的赞扬,并没有更多的权限是允许的,

或者设计为前端允许用户点,只有后台不重复计算;

需要注意的是,用户的观点可能在数据库中,或者在缓存中,因此查询是可用的。

缓存和数据库都在查询,缓存不再查询数据库。

记录表扬/用户的点不同意在redis,特别:

1。写post_set

写post_id到post_set

2。写post_user_like_set_ { $ post_id }

写user_id到post_user_like_set_ { $ post_id }

三.写post_user_like_ { $ post_id } { } _ user_id美元

写用户点赞的数据,如表扬,post_id,user_id状态,ctime(运行时间)、时间(修改时间)来post_user_like_ { $ post_id } { } _ user_id美元

4。更新post_ { } _counter post_id美元

更新post_ { } _counter post_id美元,这里的更新后的复杂一点,你需要获取当前用户看后点的太好了。

如果你点击,这个时间是取消赞美,反减一,如果不是一个点,这是一个赞扬点,计数器加一。

如果是取消的话,这是一个值得表扬的地方。

同步后台数据库

循环出来的post_set从流行音乐到post_id为空

根据{ $ post_id },一user_id出来的流行从post_user_like_set_ { $ post_id }每次空。

据post_id,user_id,相应的哈希表的内容是直接获得(post_user_like_ { $ post_id } { } _ user_id美元

从哈希表的user_like_post表写入数据

添加数据在post_ { $ post_id } _counter在post_like数据并将结果写入到post_like表

页面显示

1。询问用户的观点
前面已经说过,你需要查询redis和MySQL的同时

2。查询岗位统计

另外,你需要查询post_ { $ post_id } _counter和MySQL的post_like表在redis和添加。

结果是正确的。

总结

解决mysql读写问题

但一个子表的设计是不考虑庞大的用户基础的情况下,和一个user_id或post_id表可以考虑。

以上就是本文的全部内容。希望本文的内容能给大家的学习工作带来一定的帮助。如果有任何疑问,您可以留言交流,谢谢您的支持。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部