redis bitmap实现点赞的思路

redis bitmap实现点赞的思路

bitmap简介:

  bitmap时一连串的二进制数字(0,1),每位所在的位置为偏移(offset),在bitmap上可以执行and、or、xor以及其他操作

位图计数:

  位图计数 的意思是统计bitmap中值为1的位的个数,位统计的效率时很高的。

redis中允许使用二进制的key和二进制的value,bitmap就是二进制的value。

点赞/取消点赞:

  假设用户ID为100,对照片ID为100的照片进行点赞。首先根据照片ID生成数据存储的redis key,比如生成策略是like_photo:{photo_id},用户ID为1000的用户点赞只需将like_photo:100的第1000位设置为1即可(取消置为0)。

  redis setbit操作的时间复杂度为O(1),所以这种点赞方式十分高效。

当前是否点赞:

  用户打开图片的时候需要查询当前是否点赞过该照片,查询是否点赞可以通过redis getbit操作实现。

查询点赞总次数:

  比如需要显示照片ID为1000的照片的获赞总次数,只需对like_photo:1000进行位图计数操作即可:bitcount。时间复杂度为O(N)。个人以为可以在照片表中加一个字段记录获赞总次数,这样就不用循环统计各个照片的获赞次数。

redis还提供了bittop等其他一些API,可以实现一些有趣的事。

局限性:

  当用户量很大的时候,比如千万级用户量的时候,最坏的情况下一个点赞bitmap需要消耗的内存为10000000/8/1024/1024=1.19MB,

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部