当前位置: 首页 > news >正文

签到系统怎么设计

背景

相信签到系统大家都有接触过,更多的是使用。但是有思考过这种系统是怎么设计的吗?比方说我统计一下每个月中每天的签到情况,怎么设计呢?今天一篇文章告诉你。

首先,我们熟悉的思维是:我设计一个数据表,实现签到的统计。

这样设计确实是可以的,但是我们仅仅作为统计的话,这样的设计就显得有点冗余了,那还有更简单的方式吗?今天就来介绍一下redis的bitmap实现这一需求。

bitmap

Redis 的 Bitmap 是一种位图数据结构,用于存储和处理位级别的数据。它使用 Redis 字符串数据类型来表示一个由二进制位组成的数组,其中每个位可以是 0 或1。它的存储结构可以用下边的这个表格展示:

000000101001001010101001010110

Redis Bitmap 的一些常见操作:

  1. SETBIT key offset value:将指定位置的位设置为给定的值(0 或 1)。 示例:SETBIT mybitmap 0 1
  2. GETBIT key offset:返回指定位置的位的值。 示例:GETBIT mybitmap 0
  3. BITCOUNT key [start end]:计算指定范围内的位为 1 的数量。 示例:BITCOUNT mybitmap 0 -1
  4. BITOP operation destkey key [key ...]:对一个或多个位图执行逻辑运算(AND、OR、XOR、NOT)并将结果保存到目标位图中。 示例:BITOP AND destbitmap bitmap1 bitmap2

Redis 的 Bitmap 可以进行高效的位操作,所以一些常见的设计场景都可用到。如:

  • 在统计系统中,可以使用位图记录用户的活跃状态:活跃/不活跃
  • 在推荐系统中,可以使用位图记录用户的喜好标签:喜欢/不喜欢
  • 在排重场景中,可以使用位图记录已经出现过的元素

Redis 的 Bitmap 提供了一种简单而高效的方式来操作位级别的数据,并且占用的存储空间非常小。这使得它成为处理大规模位信息的理想选择。

所以,明显的第三种场景是非常适合的。今天的设计也选取了第三种场景。

测试

我们先在redis-cli中测试一下。

我操作的是第0天,我到了,第2、5天没有到,所以总共到了1天。

对应的代码设计其实和在命令行中的操作差不多,这里就不再展示了。相信以后会遇到这样的需求的,shigen也会同步的更新。


以上就是今天的分享内容啦,感谢伙伴们的阅读。

shigen一起,每天不一样!

http://www.lryc.cn/news/155670.html

相关文章:

  • 危险的套娃:攻击者在 PDF 文件中隐藏恶意Word 文档
  • 怎样将几个pdf合并?
  • vr健康管理服务情景化教学弥补现代医学教学中的诸多不足之处
  • 【业务功能篇92】微服务-springcloud-多线程-异步处理-异步编排-CompletableFutrue
  • CAN FD的一致性测试 助力汽车电子智能化
  • 微信短链跳转到小程序指定页面调试
  • 机器学习——聚类算法一
  • 【2023研电赛】安谋科技企业命题三等奖作品: 短临天气预报AI云图分析系统
  • The Sandbox 与韩国仁川市合作,打造身临其境的城市体验内容
  • JVM之堆和方法区
  • Java 中的 IO 和 NIO
  • Linux-crontab使用问题解决
  • 【设计模式】
  • 2023_Spark_实验四:SCALA基础
  • 【深入解析spring cloud gateway】04 Global Filters
  • c++搜索基础进阶
  • 管网水位监测的必要性
  • 无涯教程-Android - 系统架构
  • await接受成功的promise,失败的promise用try catch
  • 赞奇科技参与华为云828 B2B企业节,云工作站入选精选产品解决方案
  • Docker私有镜像仓库(Harbor)安装
  • 【深入解析spring cloud gateway】06 gateway源码简要分析
  • 2023年行研行业研究报告
  • linux上vscode中.cpp文件中引入头文件.hpp时报错:找不到头文件(启用错误钵形曲线)
  • Sphinx Docstring
  • JVM的故事——虚拟机类加载机制
  • Sentry 是一个开源的错误监控和日志聚合平台-- 通过docker-compose 安装Sentry
  • Redis 7 第六讲 主从模式(replica)架构篇
  • 学习资源记录 =0=
  • Python import包路径管理