Redis字符串(STRING)中BIT相关命令

127.0.0.1:6379> GETBIT k1 3

(integer) 0

127.0.0.1:6379> GETBIT k1 4

(integer) 0

127.0.0.1:6379> GETBIT k1 5

(integer) 0

127.0.0.1:6379> GETBIT k1 6

(integer) 0

127.0.0.1:6379> GETBIT k1 7

(integer) 1

SETBIT

SETBIT可以用来修改二进制数据,比如a对应的ASCII码为97,c对应的ASCII码为99,97转为二进制是01100001,99转为二进制是01100011,两个的差异在于第六位一个是0一个是1,通过SETBIT命令,我们可以将k1的第六位的0改为1(第六位是从0开始算),如下:

127.0.0.1:6379> SETBIT k1 6 1

(integer) 0

127.0.0.1:6379> GET k1

“c”

此时,k1中存储的字符也就变为了c。SETBIT在执行时所返回的数字,表示该位上原本的bit值。

BITCOUNT

BITCOUNT可以用来统计这个二进制数据中1的个数,如下:

127.0.0.1:6379> BITCOUNT k1

(integer) 4

关于BITCOUNT,redis官网上有一个非常有意思的案例:用户上线次数统计。节选部分原文如下:

举个例子,如果今天是网站上线的第 100 天,而用户 peter 在今天阅览过网站,那么执行命令 SETBIT peter 100 1 ;如果明天 peter 也继续阅览网站,那么执行命令 SETBIT peter 101 1 ,以此类推。

当要计算 peter 总共以来的上线次数时,就使用 BITCOUNT 命令:执行 BITCOUNT peter ,得出的结果就是 peter 上线的总天数。

这种统计方式最大的好处就是节省空间并且运算速度快。每天占用一个bit,一年也就365个bit,10年也就10*365个bit,也就是456个字节,对于这么大的数据,bit的操作速度非常快。

BITOP

BITOP可以对一个或者多个二进制位串执行并(AND)、或(OR)、异或(XOR)以及非(NOT)运算,如下:a对应的ASCII码转为二进制是01100001,c对应的二进制位串是01100011。对这两个二进制位串分别执行AND\OR\XOR的结果如下:

127.0.0.1:6379> set k1 a

OK

127.0.0.1:6379> set k2 c

OK

127.0.0.1:6379> BITOP and k3 k1 k2

(integer) 1

127.0.0.1:6379> get k3

“a”

127.0.0.1:6379> BITOP or k3 k1 k2

(integer) 1

127.0.0.1:6379> get k3

“c”

127.0.0.1:6379> BITOP xor k3 k1 k2

(integer) 1

127.0.0.1:6379> get k3

“\x02”

另外,BITOP也可以执行NOT运算,但是注意参数个数,如下:

127.0.0.1:6379> BITOP not k3 k4

(integer) 1

这里会对k4的二进制位串取反,将取反结果交给k3.

BITPOS

BITPOS用来获取二进制位串中第一个1或者0的位置,如下:

127.0.0.1:6379> set k1 a

OK

127.0.0.1:6379> BITPOS k1 1

(integer) 1

127.0.0.1:6379> BITPOS k1 0

(integer) 0

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
roid开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 9
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值