我们在登陆某些博客网站或者视频网站的时候,网站往往会记录我们是否阅读了某篇文章,或者是观看了某个视频。

如果用传统的mysql数据库实现,如果用户数量多,文章和视频也多的情况下,那么则会给数据库带来很大的压力。

而用Redis的GETBIT和SETBIT则会简单得多。
我们以视频为例,我们用bitmap来记录用户们是否已经观看了某一个视频,一个视频对应一个bitmap。例如

1
2
key:   video:1201
value: 000000...0000

key以视频英文名video+冒号+id标记。
value就是一个bitmap。一位(bit)有两种可能,0或者1。0代表未看,1代表已经看过了。
而位置(offset)代表的就是user id。例如第200位就代表user_id为200的用户是否观看过id为1201的视频。

设置

1
2
3
4
# SETBIT key offset value
 
SET video:1201 200 1
# 上面的命令就是设置ID为200的用户,已经看过了ID为1201的视频。

查询

1
2
3
# GETBIT key offset
GETBIT video:1201 200
# 上面的命令就是查询ID为200的用户是否观看了ID为1201的视频

当然您也可以一个用户对应一个bitmap,bitmap中的位代表一个视频是否已经被观看。

另外文章中也将到目前非常流行的打卡或者是登陆记录也可以用相似的设计实现。
例如用一个bitmap记录所有用户的登陆情况,bitmap中的一位代表一个用户当天是否有登陆,0代表没登陆,1代表有登陆。
每天生成一个bitmap。

通过统计多天bitmap就可以实现统计活跃用户之类的操作了。

最新文章

  1. dl dt dd定义
  2. 【转】 Live555
  3. [流媒体]VLC主要模块
  4. php对mysql简单读取的实例
  5. php约瑟夫环
  6. 关于Android Canvas.drawText方法中的坐标参数的正确解释
  7. 多线程学习之三生产者消费者模式Guarded Suspension
  8. swift之函数式编程(四)
  9. win7及以上系统打开chm空白或显示"无法打开"的2个解决方案
  10. PXE无人值守安装
  11. hiho一下 第144周
  12. 将字符串表示的IP地址转变为整形表示
  13. grafana 指标视图嵌入到其他html网页
  14. SpringBoot @Aspect
  15. windows 2008远程桌面企业协议号
  16. ScintillaNET的应用
  17. AJAX删除事件与加载数据
  18. Word或者WPS里证件照的背景底色和像素调整
  19. 基于图的图像分割(Graph-Based Image Segmentation)
  20. python. pandas(series,dataframe,index) method test

热门文章

  1. Qt + VS 【如何添加图片资源】
  2. docker 运行jenkins及vue项目与springboot项目(四.docker运行nginx)
  3. APICloud框架——总结一下最近开发APP遇到的一些问题 (二)
  4. MFC不同窗口之间传递数据
  5. http协议和file协议的区别
  6. vi 编辑器使用指南
  7. Python做单元测试小实例
  8. 【网络是怎么连接的】一、浏览器与HTTP协议
  9. 微信小程序观察者模式 observers
  10. ajax请求 Provisional headers are show