Redis BitMap 签到打卡功能实现
项目里做了签到打卡功能用 BitMap 非常省内存。BitMap 原理BitMap 就是操作二进制位每个位只有 0 和 1。签到第 5 天签到 → 把第 5 位设为 1。签到实现// 用户 1001 在 2026 年 6 月的签到 // key sign:1001:202606 // offset 天数 - 1 // 第 5 天签到 redisTemplate.opsForValue() .setBit(sign:1001:202606, 4, true); // 检查第 5 天是否签到 Boolean signed redisTemplate.opsForValue() .getBit(sign:1001:202606, 4);统计月签到天数// 获取 6 月所有签到位的二进制值 byte[] bits redisTemplate.opsForValue() .get(sign:1001:202606); // 遍历统计 1 的数量 int count 0; for (byte b : bits) { count Integer.bitCount(b 0xFF); }内存对比一个用户存一年的签到记录MySQL365 条记录每条至少几十字节BitMap365 位 ≈ 46 字节百万用户一年也才 46MB非常省。连续签到天数这个稍微麻烦点需要从当天往前遍历遇到 0 就停。签到功能用 BitMap 实现很简单面试问到可以说这个方案很优雅。