redis数据类型-位域bitfield

redis数据类型-位域bitfield

文档

  1. redis单机安装
  2. redis常用的五种数据类型
  3. redis数据类型-位图bitmap
  4. redis数据类型-基数统计HyperLogLog
  5. redis数据类型-地理空间GEO
  6. redis数据类型-流Stream

官方文档

  1. 官网操作命令指南页面:https://redis.io/docs/latest/commands/?name=get&group=string
  2. BITFIELD

位域:bitfield

说明
  1. 将redis字符串视为位数组
  2. hello字符串占用5个字节,一个字节8位,hello用二进制表示为:h01101000e01100101l01101100l01101100o01101111
  3. 二进制转换为十进制,有两种方式,按照有符号转换和无符号转换,有符号转换时,首位为1的表示负数,例如:一个4位的二进制1100,无符号转换为:12,有符号转换为:-4
  4. 二进制转换为十进制,一个字节为一组,hello可以表示为:h104e101l108l108o111
  5. redis命令参数中,u8表示一个8位二进制按无符号转换为十进制整数,i16表示一个16位二进制按有符号转换为十进制整数
基本命令
  1. set k1 hello:普通的set命令
  2. bitfield k1 get u8 0:k1的值,从第0位开始,取8位,按无符号方式转换为十进制整数。返回:104
  3. bitfield k1 set i8 8 97:k1的值,从第8位开始,取8位,设置为97,97转化为8位有符号二进制为01100001,对应的字符为a。返回上一个当前位置的值,十进制
  4. bitfield k1 incrby u8 0 1:k1的值,从第0位起,取8位,加1,按无符号方式转换为十进制整数。返回当前位置的值,十进制
溢出控制
  1. bitfield k1 overflow wrap set u4 0 17:当设置的值大于或小于4位无符号二进制时,采用回绕的方式进行设置,这里设置的值为1。返回上一个当前位置的值,十进制
  2. bitfield k1 overflow sat set u4 0 17:饱和计算,上溢取最大值,下溢取最小值,这里设置的置为15。返回上一个当前位置的值,十进制
  3. bitfield k1 overflow fail set u4 0 17:溢出时,拒绝执行。返回:(nil)

举例

hello变更为hatlo

hello按字节分组,二进制为:h01101000e01100101l01101100l01101100o01101111

hello按字节分组,十进制为:h104e101l108l108o111

hatlo按字节分组,二进制为:h01101000a01100001t01110100l01101100o01101111

hatlo按字节分组,十进制为:h104a97t116l108o111

方式1,按照字节变更,将第8位开始连续8位设置为97,将第16位开始连续8位设置为116

  1. set k2 hello
  2. bitfield k2 set u8 8 97
  3. bitfield k2 set u8 16 116
  4. get k2

方式2,将整体的二进制放到一起,观察需要变更的位

hello:0110 1000,0110 01010110 1100,0110 1100,0110 1111

hatlo:0110 1000,0110 00010111 0100,0110 1100,0110 1111

可以看到,只需要从第12位开始的连续10位变更即可,无符号二进制0001 0111 01,即00 0101 1101,转十进制为93

  1. set k3 hello
  2. bitfield k3 set u10 12 93
  3. get k3

你可能感兴趣的:(redis,redis,数据库,缓存)