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,
相关内容
-
苹果8图片怎么编辑文字|苹果8怎么编辑照片写字
苹果8图片怎么编辑文字|苹果8怎么编辑照片写字,,苹果8图片怎么...
-
你支持800万用户Firefox吗如何能在火狐浏览器上
你支持800万用户Firefox吗如何能在火狐浏览器上中国的道路,,2...
-
如何设置用户权限|如何设置用户权限密码
如何设置用户权限|如何设置用户权限密码,,如何设置用户权限密...
-
EXCEL如何统计个数?
EXCEL如何统计个数?,个数,统计,如何,关于计数,最常用的就是Cout...
-
linux – 如何为Debian中的所有用户设置PATH?
linux – 如何为Debian中的所有用户设置PATH?,适用于,用户,我有...
-
金蝶系统管理员删除|金蝶用户管理员删了怎么办
金蝶系统管理员删除|金蝶用户管理员删了怎么办,,1.金蝶用户管...
-
如何删除电脑上的用户|如何删除电脑上的用户名
如何删除电脑上的用户|如何删除电脑上的用户名和密码,,如何删...
-
苹果手机连电脑总提示|苹果手机连电脑总提示信
苹果手机连电脑总提示|苹果手机连电脑总提示信任不提示显示...
-
台式机还是笔记本夏天给电脑用户买什么
台式机还是笔记本夏天给电脑用户买什么,,随着暑假的到来,许多同...
-
苹果手机丢了怎么找|苹果手机丢了怎么找回照片
苹果手机丢了怎么找|苹果手机丢了怎么找回照片,,苹果手机丢了...
-
添加网络打印机|添加网络打印机要输入用户名密
添加网络打印机|添加网络打印机要输入用户名密码,,添加网络打...
-
看电脑照片的软件|用电脑看照片的软件
看电脑照片的软件|用电脑看照片的软件,,用电脑看照片的软件点...
-
手机qq导入照片到电脑上|手机qq导入照片到电脑
手机qq导入照片到电脑上|手机qq导入照片到电脑上不显示,,手机q...
-
怎么在电脑上查照片dpi|如何查看电脑上的照片
怎么在电脑上查照片dpi|如何查看电脑上的照片,,1. 如何查看电...
-
金蝶软件显示与其它用户有冲突|金蝶KIS专业版出
金蝶软件显示与其它用户有冲突|金蝶KIS专业版出现“当前使用...