当前位置: 首页 > news >正文

解锁新技能《Redis SETBIT用法》

SETBIT语法:
SETBIT key offset value
  • key:位图的键
  • offset:偏移量(0~2^32-1,位图最大512MB),最大偏移量值是4294967295
  • value:值0或1

我们先回顾下常识:

1GB=1024MB
1MB=1024KB
1KB=1024B
1B=8bits

在Redis中,存储的字符串都是以二进制的方式存储的;字符’a’的ASCII码时97,转为二进制是01100001,字符’b’的ASCII码时98,转为二进制是01100010;二进制中的每一位都是offset偏移量的值,比如:字符’a’的偏移量offset为0时值为0,offset为1时值为1;offset偏移量是从左往右计算的,也就是从高位往低位(偏移量从0开始计算)

我们可以通过SETBIT命令将emily中的字符’a’变为字符’b’,即将01100001变为01100010;

首先往redis库中插入字符’a’:

127.0.0.1:6379[1]> set emily 'a'
OK
127.0.0.1:6379[1]> get emily
"a"

然后将字符’a’(01100001)的第7位变成1,第8位变成0(offset分别是6和7):

127.0.0.1:6379[1]> SETBIT emily 6 1
(integer) 0
127.0.0.1:6379[1]> SETBIT emily 7 0
(integer) 1
127.0.0.1:6379[1]> get emily
"b"

上述SETBIT命令操作完成后都会返回一个整数0或1,这其实是你操作之前offset位置上的比特值;

GETBIT用法
GETBIT key offset

获取指定键值的偏移量上的比特值;

示例:获取字符’b’(01100010)offset为2、6、7的比特值:

127.0.0.1:6379[1]> GETBIT emily 2
(integer) 1
127.0.0.1:6379[1]> GETBIT emily 6
(integer) 1
127.0.0.1:6379[1]> GETBIT emily 7
(integer) 0
BITCOUNT用法
BITCOUNT key [start end [BYTE | BIT]]

统计指定键和开始结束偏移量值为1的数量,offset偏移量单位默认是BYTE

示例:获取字符’b’(01100010)指定偏移量之间值为1的数量:

127.0.0.1:6379[1]> BITCOUNT emily 0 7
(integer) 3
127.0.0.1:6379[1]> BITCOUNT emily 0 1
(integer) 3
127.0.0.1:6379[1]> BITCOUNT emily 0 1 bit
(integer) 1
127.0.0.1:6379[1]> BITCOUNT emily 0 2 bit
(integer) 2
127.0.0.1:6379[1]> BITCOUNT emily 0 3 bit
(integer) 2
127.0.0.1:6379[1]> BITCOUNT emily 0 5 bit
(integer) 2
127.0.0.1:6379[1]> BITCOUNT emily 0 6 bit
(integer) 3

GitHub地址:https://github.com/mingyang66/spring-parent

相关文章:

  • STL应用 —— queue(队列)
  • 【计算机网络】OSI七层网络参考模型
  • 第二十章 控制进程(一)
  • 移动Web第四天 1 移动适配
  • JavaFx 实现按钮防抖和软件重启(Kotlin)
  • 2022年全国最新消防设施操作员(高级消防设施操作员)真题题库及答案
  • Rest学习环境搭建笔记
  • JavaScript-DOM节点的相关操作
  • 猿创征文|HCIE-Security Day49:AC准入控制SACG
  • 移动Web第二天 4 空间转换 5 动画
  • LeetCode646-最长数队链
  • 力扣:23,-合并K个升序链表
  • 移动Web第三天 1 移动端特点 2 百分比布局 3 Flex布局
  • vue中用ref实现父子组件、孙组件、兄弟组件、非亲子孙组件互相调用的方法
  • 【信号去噪】基于鲸鱼算法优化VMD实现信号去噪附matlab代码
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • Akka系列(七):Actor持久化之Akka persistence
  • Docker: 容器互访的三种方式
  • JavaScript设计模式系列一:工厂模式
  • Java的Interrupt与线程中断
  • java正则表式的使用
  • leetcode46 Permutation 排列组合
  • maya建模与骨骼动画快速实现人工鱼
  • REST架构的思考
  • vagrant 添加本地 box 安装 laravel homestead
  • 第十八天-企业应用架构模式-基本模式
  • 如何胜任知名企业的商业数据分析师?
  • 用Canvas画一棵二叉树
  • 字符串匹配基础上
  • ionic异常记录
  • 数据库巡检项
  • #控制台大学课堂点名问题_课堂随机点名
  • $forceUpdate()函数
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (四)JPA - JQPL 实现增删改查
  • (原)Matlab的svmtrain和svmclassify
  • (转) ns2/nam与nam实现相关的文件
  • (转)EOS中账户、钱包和密钥的关系
  • (转)甲方乙方——赵民谈找工作
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .Net MVC4 上传大文件,并保存表单
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .Net中ListT 泛型转成DataTable、DataSet
  • /run/containerd/containerd.sock connect: connection refused
  • @Autowired注解的实现原理
  • @Autowired自动装配
  • @FeignClient注解,fallback和fallbackFactory