Bit命令

命令简介:

1)setbit:设置字符串指定偏移量bit

2)getbit:获取字符串指定偏移量bit

3)bitcount:获取字符串位中为1的数量

4)bitpos:获取指定范围的位图中第一个值为bit的二进制位的位置

5)bitop:对一个或者多个保存二进制位的字符串key进行位元操作,并且将结果保存到destkey上

6)bitfield

命令详解:

1.setbit

可用版本:>=2.2.0

时间复杂度:O(1)

命令格式:setbit key offset value

作用:

对key存储的字符串值,设置或者清除指定偏移量上的位Bit。

返回值:

指定偏移量原本存储的位。

注意:

位的设置或者清除取决于value参数,可以是0与1。

当key不存在时,会自动生成。

字符串会自动进行伸缩以确保它可以将value保存在指定的偏移量上。当字符串进行伸缩时,空白位置以0填充。

offset参数必须大于等于0,小于2^32。

2.getbit

可用版本:>=2.2.0

时间复杂度:O(1)

命令格式:getbit key offset

作用:

获取key存储字符串值,指定偏移量上的位。

返回值:

指定偏移量原本存储的位。

注意:

当offset大于字符串长度,或者key不存在时返回0。

3.bitcount

可用版本:>=2.6.0

时间复杂度:O(N)

命令格式:bitcount key [start] [end]

作用:

获取key存储字符串值,一定范围内,位值为1的数量。

返回值:

位值为1的数量。

注意:

start与end可以是负数。

不存在的key当作空字符串处理,返回0。

4.bitpos

可用版本:>=2.8.7

时间复杂度:O(N)

命令格式:bitpos key bit [start] [end]

作用:

获取指定范围的位图中第一个值为bit的二进制位的位置。

返回值:

整数位置。

注意:

默认情况下,检测整个位图。也可以使用start end参数,指定检测的范围。

5.bitop

可用版本:>=2.6.0

时间复杂度:O(N)

命令格式:bitop operation destkey key [key...]

作用:

对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 destkey 上。

返回值:

保存到 destkey 的字符串的长度,和输入 key 中最长的字符串长度相等。

注意:

operation之内是以下几个选项:

1)AND-对一个或者多个key求逻辑并,并将结果保存到destkey上。

2)OR-对一个或者多个key求逻辑或,并将结果保存到destkey上。

3)XOR-对一个或者多个key求逻辑异或,并将结果保存到destkey上。

4)NOT-对一个或者多个key求逻辑非,并将结果保存到destkey上,not只支持一个key。

字符串长度不一时,短的字符串将会使用0自动填充。

6.bitfield

可用版本:>=3.2.0

时间复杂度:O(1)

命令格式:bitfield key [GET type offset] [set type offset value] [incrby type offset increment] [overflow wrap|sat|fail]

作用:

bitfield命令将一个redis字符串看作是一个由二进制位组成的数组,并对这个数组中存储的长度不同的整数进行访问。

bitfield命令可以在一次调用中同时对多个位范围进行操作,它接受一系列待执行的操作作为参数,并返回一个数组作为回复,数组中每一个元素就是对应操作的执行结果。

BITFIELD 命令的作用在于它能够将很多小的整数储存到一个长度较大的位图中, 又或者将一个非常庞大的键分割为多个较小的键来进行储存, 从而非常高效地使用内存, 使得 Redis 能够得到更多不同的应用 —— 特别是在实时分析领域: BITFIELD 能够以指定的方式对计算溢出进行控制的能力, 使得它可以被应用于这一领域。

返回值:

BITFIELD 命令的返回值是一个数组, 数组中的每个元素对应一个被执行的子命令。 需要注意的是, OVERFLOW 子命令本身并不产生任何回复。

注意:

使用 GET 子命令对超出字符串当前范围的二进制位进行访问(包括键不存在的情况), 超出部分的二进制位的值将被当做是 0 。

使用 SET 子命令或者 INCRBY 子命令对超出字符串当前范围的二进制位进行访问将导致字符串被扩大, 被扩大的部分会使用值为 0 的二进制位进行填充。 在对字符串进行扩展时, 命令会根据字符串目前已有的最远端二进制位, 计算出执行操作所需的最小长度。

子命令支持:

GET —— 返回指定的二进制位范围。

SET —— 对指定的二进制位范围进行设置,并返回它的旧值。

INCRBY —— 对指定的二进制位范围执行加法操作,并返回它的旧值。用户可以通过向 increment 参数传入负值来实现相应的减法操作。

OVERFLOW [WRAP|SAT|FAIL]——改变之后执行的 INCRBY 子命令在发生溢出情况时的行为。

偏移量:

在二进制位范围命令中, 用户有两种方法来设置偏移量:

如果用户给定的是一个没有任何前缀的数字, 那么这个数字指示的就是字符串以零为开始(zero-base)的偏移量。

另一方面, 如果用户给定的是一个带有 # 前缀的偏移量, 那么命令将使用这个偏移量与被设置的数字类型的位长度相乘, 从而计算出真正的偏移量。

比如说, 对于以下这个命令来说:

BITFIELD mystring SET i8 #0 100 i8 #1 200

命令会把 mystring 键里面, 第一个 i8 长度的二进制位的值设置为 100 , 并把第二个 i8 长度的二进制位的值设置为 200 。 当我们把一个字符串键当成数组来使用, 并且数组中储存的都是同等长度的整数时, 使用 # 前缀可以让我们免去手动计算被设置二进制位所在位置的麻烦。

溢出控制:

用户可以通过 OVERFLOW 命令以及以下展示的三个参数, 指定 BITFIELD 命令在执行自增或者自减操作时, 碰上向上溢出(overflow)或者向下溢出(underflow)情况时的行为:

WRAP : 使用回绕(wrap around)方法处理有符号整数和无符号整数的溢出情况。 对于无符号整数来说, 回绕就像使用数值本身与能够被储存的最大无符号整数执行取模计算, 这也是 C 语言的标准行为。 对于有符号整数来说, 上溢将导致数字重新从最小的负数开始计算, 而下溢将导致数字重新从最大的正数开始计算。 比如说, 如果我们对一个值为 127 的 i8 整数执行加一操作, 那么将得到结果 -128 。

SAT : 使用饱和计算(saturation arithmetic)方法处理溢出, 也即是说, 下溢计算的结果为最小的整数值, 而上溢计算的结果为最大的整数值。 举个例子, 如果我们对一个值为 120 的 i8 整数执行加 10 计算, 那么命令的结果将为 i8 类型所能储存的最大整数值 127 。 与此相反, 如果一个针对 i8 值的计算造成了下溢, 那么这个 i8 值将被设置为 -127 。

FAIL : 在这一模式下, 命令将拒绝执行那些会导致上溢或者下溢情况出现的计算, 并向用户返回空值表示计算未被执行。

需要注意的是, OVERFLOW 子命令只会对紧随着它之后被执行的 INCRBY 命令产生效果, 这一效果将一直持续到与它一同被执行的下一个 OVERFLOW 命令为止。 在默认情况下, INCRBY 命令使用 WRAP 方式来处理溢出计算。

以下是一个使用 OVERFLOW 子命令来控制溢出行为的例子:

> BITFIELD mykey incrby u2 100 1 OVERFLOW SAT incrby u2 102 1

1) (integer) 1

2) (integer) 1

> BITFIELD mykey incrby u2 100 1 OVERFLOW SAT incrby u2 102 1

1) (integer) 2

2) (integer) 2

> BITFIELD mykey incrby u2 100 1 OVERFLOW SAT incrby u2 102 1

1) (integer) 3

2) (integer) 3

> BITFIELD mykey incrby u2 100 1 OVERFLOW SAT incrby u2 102 1

1) (integer) 0 -- 使用默认的 WRAP 方式处理溢出

2) (integer) 3 -- 使用 SAT 方式处理溢出

而以下则是一个因为 OVERFLOW FAIL 行为而导致子命令返回空值的例子:

> BITFIELD mykey OVERFLOW FAIL incrby u2 102 1

1) (nil)

性能注意事项:

BITFIELD 在一般情况下都是一个快速的命令, 需要注意的是, 访问一个长度较短的字符串的远端二进制位将引发一次内存分配操作, 这一操作花费的时间可能会比命令访问已有的字符串花费的时间要长。

二进制位的排列:

BITFIELD 把位图第一个字节偏移量 0 上的二进制位看作是 most significant 位, 以此类推。 举个例子, 如果我们对一个已经预先被全部设置为 0 的位图进行设置, 将它在偏移量 7 的值设置为 5 位无符号整数值 23 (二进制位为 10111 ), 那么命令将生产出以下这个位图表示:

+--------+--------+

|00000001|01110000|

+--------+--------+

当偏移量和整数长度与字节边界进行对齐时, BITFIELD 表示二进制位的方式跟大端表示法(big endian)一致, 但是在没有对齐的情况下, 理解这些二进制位是如何进行排列也是非常重要的。

Bit命令 相关文章

RabbitMQ高级特性

RabbitMQ高级特性 1、消息可靠性投递 RabbitMQ消息投递的路径: 生产者 -- rabbitmq中间件 -- 交换机 --路由到-- 消息列表 -- 消费者 首先分析一下,消息不可靠的情况可能是 消息丢失 ,劫持 等原因 丢失:生产者丢失、消息列表丢失、消费者丢失 找到了原因

docker常用命令

安装启动docker后,以创建nginx为例。 1.获取镜像 docker pull nginx 2.运行 docker run -it --rm nginx bash docker run:启动镜像 -it:表示交互式;-d表示后台服务启动 --rm:推出后删除,若未添加该选项,手动删除方式为docker rm 容器id,查看运行的容

Dokcer run 的一些选项详解

Docker命令详解(run篇) 命令格式: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] Usage: Run a command in a new container 中文意思为:通过run命令创建一个新的容器(container) 常用选项说明 -d, --detach=false , 指定容器运行于前台还是后台,默

Linux常用命令-文件处理命令

目录 Linux常用命令-文件处理命令 命令格式与目录处理命令ls 目录处理命令: ls mkdir cp mv rm 目录处理命令 touch cat more less head 显示文件的前几行 tail 查看文件后几行 链接命令 ln Linux常用命令-文件处理命令 命令格式与目录处理命令ls 命令格式:

Maven精简笔记

Maven基本命令 1. mvn complile :编译命令,将 src/main 目录下的代码以及资源文件进行编译,在项目目录中生成 target 目录用来存放编译好的 class 文件等等 2. mvn clean :清空编译缓存,将生成的 target 目录删除,通常情况下当修改代码后未生效就可以尝

xargs-命令

xargs命令 xargs命令可以通过管道或者stdin接受字符串,并将接收到的字符串通过空格分割成许多参数(默认情况下是通过空格分割) 然后将参数传递给其后面的命令,作为后面命令的命令行参数。 xargs 与管道有什么不同 (base) [root@localhost Tana]# echo "--he

Linux netstat命令详解

简介 Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。 输出信息含义 执行netstat后,其输出结果为 [vagrant@centos6 ~]$ netstat|moreActive Inter

Git常用命令

Git常用命令 1. 基本操作 # 查看git的配置列表$ git config --list# 设置用户名/邮箱/密码(全局配置)$ git config --global user.name "username"$ git config --global user.email "email"$ git config --global user.password "password"#删除某个全局配置

windows 批处理命令必知必会

全局用例,有如下txt文件,内容如下: 1、java.jar 2、.net.dll3、javascript.js4、image.jpeg 5、html.htm 1、for命令 (1)、参数 /f 代表扫描文件,打印文件所有内容,代码如下: for /f %%i in (C:\Users\Administrator\Desktop\test.txt) do echo %%i pausenul

解决ubuntu server添加新用户后无法使用tab自动完成命令功能

因为ubuntu server默认使用的是Bourne shell而不是Bash shell,所以导致当使用 $ useradd username 的时候,没有命令自动完成功能。 使用 $ chsh -s /bin/bash username 可以改变某个用户的bash 如果想改变默认shell,需要修改 $ sudo vim /etc/defaults/use

bitcount函数c语言,Bit命令相关推荐

  1. C语言设计模式——命令模式

    C语言设计模式--命令模式 好处:让代码清晰明了,容易添加和删除,易维护. 哪些地方会用到命令模式?(列出几个常见的例子) 1.按键处理,每个按键按下得到一个索引(指的就是命令),一个按键对应一个处理 ...

  2. c语言用命令行编译运行程序_使用C程序执行系统命令

    c语言用命令行编译运行程序 Sometimes, we may need to execute Linux/Windows DOS commands through our C program. (N ...

  3. c语言学习进阶-C语言带命令行参数的文件数据批量计算

    C语言带命令行参数的文件数据批量计算 (1)假设输入文件中的数据为多行整数,把数据文件命名为"InputData.txt",也可以命名为任意的文件名,尝试设计一个c 语言程序, 主 ...

  4. c语音学习进阶-C语言带命令行参数的程序设计

    C语言带命令行参数的程序设计 (1)深入理解并学习带命令行参数的程序设计方法,使用c 语言完成带命令行参数的科学计算程序,能从给定的任意文件名的文件当中输入数据,并能向给定的任意文件名的输出文件当中输 ...

  5. select、bash函数初识及rpm命令详解

    一.循环的特殊用法及select 二.bash函数基础 三.rpm命令 一.循环的特殊用法及select 1)while循环的特殊用法(遍历文件的每一行):  while read line; do ...

  6. python文件定位函数_C语言中文件定位函数总结

    C语言中文件定位函数主要是:fseek, ftell, fsetpos, fgetpos. 先来讲前两个函数,这是最基本的定位函数: fseek函数:能把文件指针移动到文件任何位置,其原型是:int ...

  7. 自定义函数 | R语言偏相关分析及绘图

    R语言的偏相关分析过程 偏相关分析介绍 阶偏相关分析: 偏相关系数: Pearson相关系数 Spearman相关系数 Kendall等级相关系数 R语言实现偏相关分析 pcor() pcor.tes ...

  8. C语言预处理命令(预处理指令)

    C语言预处理命令分为:宏定义.文件包含.条件编译 什么是预处理命令? 预处理命令属于C语言编译器,而不是C语言的组成部分 预处理命令的作用:就是在编译和链接之前,对源文件进行一些文本方面的操作,比如文 ...

  9. Ada语言中命令行使用

    Ada语言中命令行使用 要制作命令行程序,使用系统包ada.command_line .以下例程实现一个命令行程序. 命令如下:remove -iInputFileName -nCutOffNumbe ...

最新文章

  1. 【Kubernetes】如何使用Kubeadm部署K8S集群
  2. RequestResponse(laravel)
  3. linux下汇编语言开发总结
  4. Python高能小技巧:用海象操作符减少重复代码
  5. 使用Dom4j对XML文档创建与解析
  6. 腾讯X5 内核 的导入
  7. TracePro小白学习操作
  8. s3c6410裸机调试方式总结
  9. Zabbix5.0监控CenterOS(RPM版)
  10. 2017计算机开机号202,福彩3D2017第202期彩吧3D开机号429
  11. 【数据可视化】python/pyecharts 画地图(热力图)(世界地图,省市地图,区县地图)、动态流向图
  12. 开源自主导航小车MickX4(一)ROS底盘硬件
  13. 电影《白日梦想家》剧照高清摄影大图——送给自己2021.4
  14. 2022-04-13 工作记录--LayUI-动态渲染数据表格的表头参数
  15. 电子设计解决方案透视
  16. 小米机器人扫地机贴纸_这次小米没吹牛,小米机器人扫地机评测
  17. IDEA在Git中提交忽略文件的设置
  18. sin和cos终于在一起了
  19. 《蛋仔派对》之玩转‘创意工坊’
  20. FITC-PEG-SH,荧光素-聚乙二醇-巯基的用途:用于修饰氨基酸,蛋白质等

热门文章

  1. 曾经不被看好的手表市场,如今在快手发展的怎么样了?
  2. 斗鱼VS虎牙:用户、定位、内容到资本的较量
  3. Windows下发布一个Qt程序隐藏QML文件
  4. 计算机24点游戏打开,c计算机网络编程24点游戏.doc
  5. 纯CSS设置Checkbox复选框控件的样式
  6. 智能电网如何实现 ?
  7. appendTo的应用
  8. 聊聊 Activity 栈的亲和关系
  9. JS yyyyMMddHHmmss转换yyyy-MM-dd HH:mm:ss
  10. Python学习基础