场景
我们在登陆某些博客网站或者视频网站的时候,网站往往会记录我们是否阅读了某篇文章,或者是观看了某个视频。
正常做法
用传统的mysql数据库实现
redis做法,用Redis的GETBIT和SETBIT则会简单得多。
我们以视频为例,我们用bitmap来记录用户们是否已经观看了某一个视频,一个视频对应一个bitmap。例如
//key以视频英文名video+冒号+id标记。
//value就是一个bitmap。一位(bit)有两种可能,0或者1。0代表未看,1代表已经看过了。
key: video:1201
value: 000000...0000
而位置(offset)代表的就是user id。例如第200位就代表user_id为200的用户是否观看过id为1201的视频。
# SETBIT key offset value
SET video:1201 200 1
上面的命令就是设置ID为200的用户,已经看过了ID为1201的视频。
# GETBIT key offset
GETBIT video:1201 200
# 上面的命令就是查询ID为200的用户是否观看了ID为1201的视频
当然您也可以一个用户对应一个bitmap,bitmap中的位代表一个视频是否已经被观看。
也将到目前非常流行的打卡或者是登陆记录也可以用相似的设计实现。
例如用一个bitmap记录所有用户的登陆情况,bitmap中的一位代表一个用户当天是否有登陆,0代表没登陆,1代表有登陆。
每天生成一个bitmap。
通过统计多天bitmap就可以实现统计活跃用户之类的操作了。