济南智能网站建设哪家便宜,wordpress 国外主题,试用期工作总结,学怎么做建筑标书哪个网站前言#xff1a;bitmap 占用空间小#xff0c;查询效率高#xff0c;在一些场景中使用 bitmap 是一个很好的选择。 一、bitmap 相关命令
SETBIT - 设置指定位置的比特值#xff0c;可以设为 1 或 0 例如 SETBIT key 10 1#xff0c;将在 key 对应的 bitmap 中第10位设置为… 前言bitmap 占用空间小查询效率高在一些场景中使用 bitmap 是一个很好的选择。 一、bitmap 相关命令
SETBIT - 设置指定位置的比特值可以设为 1 或 0 例如 SETBIT key 10 1将在 key 对应的 bitmap 中第10位设置为 1。 GETBIT - 获取指定位置的比特值 例如 GETBIT key 10返回 key 对应 bitmap 的第10位的值。 BITCOUNT - 统计比特值为 1 的数量 例如 BITCOUNT key返回 key 对应 bitmap 中比特值为 1 的数量。 BITPOS - 查找第一个为指定值的比特位 例如 BITPOS key 1返回 key 对应 bitmap 中第一个值为 1 的比特位的位置。 BITFIELD - 一次对多个比特位进行操作 例如 BITFIELD key INCRBY i 5 1将 key 对应 bitmap 的第 i 个比特位增加 5。 BITOP - 对两个或多个 bitmap 执行位操作(AND/OR/XOR/NOT)并存储结果到另一个 key 例如 BITOP AND destkey key1 key2将 key1 和 key2 做位与运算结果存储到 destkey。 注意: bitmap 的第几位值是从 0 开始的类似于数组下标从 0 开始。
二、bitmap 应用场景
2.1、统计用户是否在线
思路: 用户 id 作为偏移量通过用户 id 就可以快速查到用户是否在线。
记录用户 10086 已登录
SETBIT login_status 10086 1查询用户 10086 是否登录返回 1 表示用户 10086 已登录。
GETBIT login_status 10086用户 10086 退出将用户设置为离线。
SETBIT login_status 10086 02.2、用户每个月的签到情况
思路: 每个用户每天的签到用 1 个 bit 位表示一年的签到仅需要 365 个 bit 为。一个月最多只有 31 天只需要 31 个 bit 位即可。 比如统计用户 10086 在 2023 年 9 月份的打卡记录。 记录用户 10086 用户在 2023 年 9 月 3 日的签到记录。
SETBIT uid:sign:10086:202309 2 1获取用户 10086 在 2023 年 9 月 3 日是否打卡。
GETBIT uid:sign:10086:202309 2统计用户 10086 在 2023 年 9 月的打卡次数。
BITCOUNT uid:sign:10086:202309获取用户在 2023 年 9 月首次打卡的日期。
BITPOS uid:sign:10086:202309 12.3、连续签到用户总数
思路: 将某一个具体的天作为 key(day:20230907)用户 id 作为偏移量使用 BITOP 命令合并多天的 bitmap。
设置用户A、B、C 在上图中的日期签到(假设用户 id 为 1、2、3)
setbit sign:20230901 0 1
setbit sign:20230901 1 1
setbit sign:20230901 2 1
setbit sign:20230902 0 1
setbit sign:20230902 1 1
setbit sign:20230903 1 1
setbit sign:20230903 2 1与操作获取一个新的 bitmap key
bitop and result sign:20230901 sign:20230902 sign:20230903计算连续签到的人数
bitcount result2.4、优惠券每人限领一张
思路使用优惠券编号作为 bitmap key用户 id 作为 offset。发优惠券的时候先获取 bitmap 中用户是否领过优惠券。因为每人限领一张领过的人直接返回。
设置用户 100、用户 101 领取过优惠券 a。
setbit coupon:a 100 1
setbit coupon:a 101 1查看用户 100 是否领过优惠券 a返回 1 则代表用户 100 领过优惠券。
getbit coupon:a 1002.5、统计网站活跃用户
思路: 使用日期作为 key然后用户 id 为 offset。 假如 20230901 活跃用户情况是 [10110]。20230902 活跃用户情况是 [ 11010 ]
统计连续两天活跃的用户总数
bitop and dest1 20230901 20230902
bitcount dest1统计 20230901 ~ 20230902 活跃过的用户
bitop or dest2 20201009 20201010
bitcount dest2三、参考文档 Redis 实战篇巧用 Bitmap 实现亿级数据统计 Redis 中 BitMap 的使用场景
四、最后
我是 xiucai一位后端开发工程师。
如果你对我感兴趣请移步我的个人博客进一步了解。
- 文中如有错误欢迎在评论区指正如果这篇文章帮到了你欢迎点赞和关注 - 本文首发于个人博客未经许可禁止转载