千家信息网

Redis字符串中BIT相关命令有哪些

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇文章给大家分享的是有关Redis字符串中BIT相关命令有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。上篇文章我们对STRING
千家信息网最后更新 2026年11月02日Redis字符串中BIT相关命令有哪些

本篇文章给大家分享的是有关Redis字符串中BIT相关命令有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

上篇文章我们对STRING数据类型中一些基本的命令进行了介绍,但是没有涉及到BIT相关的命令,本文我们就来看看几个和BIT相关的命令。

BIT相关的命令是指BITCOUNT/BITFIELD/BITOP/BITPOS/SETBIT/GETBIT 几个命令,灵活使用这几个命令,可以给我们的项目带来很多惊喜。

准备知识

在学习这几个命令之前,我们得先了解下redis中字符串的存储方式,redis中的字符串都是以二进制的方式进行存储的,比如说我执行如下命令:

127.0.0.1:6379> SET k1 aOK

a对应的ASCII码是97,转换为二进制数据是01100001,我们BIT相关命令都是对这个二进制数据进行操作。请继续往下看。

GETBIT

GETBIT命令可以返回key对应的value在offset处的bit值,以上文提到的k1为例,a对应的二进制数据是01100001,所以当offset为0时,对应的bit值为0;offset为1时,对应的bit值为1;offset为2时,对应的bit值为1;offset为3时,对应的bit值为0,依此类推….,如下:

127.0.0.1:6379> GETBIT k1 0(integer) 0127.0.0.1:6379> GETBIT k1 1(integer) 1127.0.0.1:6379> GETBIT k1 2(integer) 1127.0.0.1:6379> GETBIT k1 3(integer) 0127.0.0.1:6379> GETBIT k1 4(integer) 0127.0.0.1:6379> GETBIT k1 5(integer) 0127.0.0.1:6379> GETBIT k1 6(integer) 0127.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) 0127.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 aOK127.0.0.1:6379> set k2 cOK127.0.0.1:6379> BITOP and k3 k1 k2(integer) 1127.0.0.1:6379> get k3"a"127.0.0.1:6379> BITOP or k3 k1 k2(integer) 1127.0.0.1:6379> get k3"c"127.0.0.1:6379> BITOP xor k3 k1 k2(integer) 1127.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 aOK127.0.0.1:6379> BITPOS k1 1(integer) 1127.0.0.1:6379> BITPOS k1 0(integer) 0

也可以在后面设置一个范围,不过后面的范围是字节的范围,而不是二进制位串的范围。

OK,STRING中BIT相关的命令我们就介绍这么多。

以上就是Redis字符串中BIT相关命令有哪些,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

命令 二进制 数据 字符 字符串 范围 就是 方式 知识 结果 网站 存储 统计 运算 两个 个数 字节 文章 更多 次数 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 A股互联网金融科技公司 互联网和科技创新 金融科技还是互联网 科技服务与互联网 华宇互联网科技 深圳互联网络科技有限公司 时间互联网络科技 互联网 新科技 佩信高科技互联网 济南和联互联网科技有限公司 互联网汽车科技小镇 深圳前海聚择互联网科技有限公司 恒银科技与互联网金融 互联网企业和科技型企业 青岛科技大学互联网大赛研究生 长沙茂晟互联网科技有限公司 爱医互联网络科技 中天科技中国工业互联网 互联网科技职业技能培训学校 杭州科技互联网公司有哪些 互联网科技股 银优互联网科技有限公司 新浪科技互联网 西藏七维空间互联网科技有限公司 重庆威客帮互联网科技 花神(南京)互联网科技有限公司 广州新华互联网科技学校电竞方面 杭州披云加互联网科技有限公司 江苏互联网智能科技软件 信承诺互联网科技有限公司
0