redis bitmap实现点赞的思路

Posted Burning_Leaf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,

 

以上是关于redis bitmap实现点赞的思路的主要内容,如果未能解决你的问题,请参考以下文章

Redis使用BitMap用户签到统计BitMap解决缓存击穿方案 及 UV(HyperLogLog) 统计页面访问量 与 独立访问量

Redis使用bitmap、zset、hash、list等结构完成骚操作?

微服务 Spring Boot 整合 Redis BitMap 实现 签到与统计

Redis Bitmap实现每日活跃用户统计

一看就懂 详解redis的bitmap(面试加分项)

一看就懂 详解redis的bitmap(面试加分项)