前言
赞美是一个非常有趣的
功能,大致有两种基本的设计思想,一种是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表可以考虑。
以上就是本文的全部内容。希望本文的内容能给大家的
学习或
工作带来一定的帮助。如果有任何疑问,您可以留言交流,谢谢您的支持。