Redis 的 Bitmap(位图)是一种特殊的数据结构,它本质上是一个字符串,但可以将它看作一个由二进制位组成的数组。每个位只能是 0 或 1,因此 Bitmap 非常适合用于存储和处理大量的布尔状态信息,而且非常节省空间。
基本操作:
SETBIT key offset value: 设置指定偏移量(offset)上的位的值(0 或 1)。GETBIT key offset: 获取指定偏移量上的位的值。BITCOUNT key [start end]: 计算指定范围内值为 1 的位的数量。BITOP operation destkey key [key ...]: 对多个 Bitmap 进行位运算(AND、OR、XOR、NOT),并将结果存储到新的 Bitmap 中。BITPOS key bit [start] [end]: 查找指定范围内第一个值为 0 或 1 的位的位置。
应用场景:
-
用户签到:
- 使用 Bitmap 存储用户的签到状态。
- 每个用户对应一个 Bitmap,Bitmap 的每一位代表一天。
- 例如,用户 ID 为 1000 的用户,2023 年 10 月 26 日签到,可以将
user_sign:1000的第 299 位(从 0 开始计算,2023 年的第 299 天)设置为 1。
// 签到 stringRedisTemplate.opsForValue().setBit("user_sign:1000", 299, true); // 查询用户是否签到 boolean signedIn = stringRedisTemplate.opsForValue().getBit("user_sign:1000", 299); // 统计用户当月签到次数 long count = stringRedisTemplate.execute((RedisCallback<Long>) connection -> connection.bitCount("user_sign:1000".getBytes()

最低0.47元/天 解锁文章
449

被折叠的 条评论
为什么被折叠?



