首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

低版本 Redis bitcount 偏移参数不是 bit 的解决方案

最近在项目中要用到一个签到N天送礼品的功能, 这个功能很自然而然的想到用Redis的bitmap去实现 签到就是setbit {key} {offset} 1 累计签到天数就是bitcount {key...2023-09-13, offset 就是 1 setbit users:id 1 1 # 11000000 # 然后获取用户: 2023-09-12 ~ 2023-09-20 的登录天数, 当时代码就是 bitcount...然后测试的时候, 测试人员反馈当获取 2023-09-13 ~ 2023-09-20 的登录天数的时候一直是 0 bitcount users:id 1 7 # 输出的是 0, 实际上上面的命令是获取了...byte, 所以在bitcount的时候, 数据不对 旧版本解决方案 由于我们的Redis版本比较低的问题, 所以代码中计算的时候改成如下方案 set的时候乘以8,虽然导致浪费了7倍的空间, 但是为了让代码简单点忍忍...(最好的方案还是升级Redis来支持BIT参数) setbit {key} {offset*8} 1 bitcount {key} {start} {end} Redis大于7.0版本解决方案 bitcount

12110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    redis中的bit运用统计用户在线天数

    使用setBit和bitCount可以实现用户活跃天数的统计,大体的思路如下: 我们网站今天第一天上线,某用户taoshihan,今天有访问那么我就记一下,网站第一天,taoshihan访问1; 网站第二天...使用代码体现为如下,具体解释可以查看视频: https://www.bilibili.com/video/av70912075/ //使用setBit和bitCount实现用户在线天数的统计 $redis...setBit("taoshihan",1,1); $redis->setBit("taoshihan",2,1); $redis->setBit("taoshihan",80,1); $v=$redis->bitCount...setBit("name",3,1);//从左到右数,从0开始 $v=$redis->get("name"); var_dump($v);//输出q,二进制为01110001 //使用setBit和bitCount...("taoshihan",1,1); $redis->setBit("taoshihan",100,1); $redis->setBit("taoshihan",150,1); $v=$redis->bitCount

    60340

    【Redis】位图以及位图的使用场景(统计在线人数和用户在线状态)

    目录 位图 基本使用 SETBIT key 索引 值0/1 GETBIT key 索引 通过SET 一次设置单个位图的所有位 BITFIELD 设置多个位 BITCOUNT BITPOS 查找指定值为...(integer) 3 127.0.0.1:6379> BITCOUNT mykey 0 1 //是计算前两个个字符 ab的位数 (integer) 6 127.0.0.1:6379> BITCOUNT...uidkey 0 0 BITCOUNT统计区间范围 BITCOUNT key [start end] #start和end参数指的是字节的索引 不是位的索引 像这种统计区间范围的还真不是很好统计...从7.73->20.92 跟我们计算的大概12MB左右; BITCOUNT统计大数据量的性能问题 在上面的例子中, 一亿位的数据量使用 BITCOUNT进行统计; BITCOUNT 复杂度是O(N)...使用BITCOUNT 开始和结束 可选参数递增地运行位图,在客户端积累结果,并可选地将结果缓存到密钥中。

    2.5K50

    Redis教程04(String类型之BIT)

    命令 说明 getbit 获取二级制中对应偏移量的值 setbit 设置对应二进制位的值 bitcount 统计二进制中位中为1的个数 bitop 对二进制数据做位元操作,与,或,非,异或操作 bitpos...BitCount命令 用来统计二进制中为1的个数,比如a(97 01100001)为3,c(99 01100011)为4. 127.0.0.1:6379> get k1 "a" 127.0.0.1:6379...> get k2 "c" 127.0.0.1:6379> bitcount k1 (integer) 3 127.0.0.1:6379> bitcount k2 (integer) 4 实际使用官网给出了例子...当要计算 peter 总共以来的上线次数时,就使用 BITCOUNT 命令:执行 BITCOUNT peter ,得出的结果就是 peter 上线的总天数。...对于这种大小的数据来说, BITCOUNT 的处理速度就像 GET 和 INCR 这种 O(1) 复杂度的操作一样快。

    40450
    领券