RedisTemplate操做命令 - Value

 

字符串操做


redis储存的字符串都是以二进制的形式存在!redis

字符串类型的内部编码有3种:
int:8个字节的长整型。
embstr:小于等于39个字节的字符串。
raw:大于39个字节的字符串。
Redis会根据当前值的类型和长度决定使用哪一种内部编码实现。数组

 

命令 操做 返回值
set(K key, V value)   void
set(K key, V value, long timeout, TimeUnit unit) 过时时间,TimeUnit时间格式 void
set(K key, V value, Duration timeout) Duration过时时间 void
setIfAbsent(K key, V value) 若是不存在则设置【setnx】 Boolean
setIfAbsent(K key, V value, long timeout, TimeUnit unit)   Boolean
setIfAbsent(K key, V value, Duration timeout)   Boolean
setIfPresent(K key, V value) 若是存在则设置【setex】 Boolean
setIfPresent(K key, V value, long timeout, TimeUnit unit)   Boolean
setIfPresent(K key, V value, Duration timeout)   Boolean
multiSet(Map<? extends K, ? extends V> map) 设置多个键值对【mset】 void
multiSetIfAbsent(Map<? extends K, ? extends V> map) 若是不存在则设置多个键值对 Boolean
get(Object key) 获取 Object V
getAndSet(K key, V value) 获取原值同时设置新值【getset】 Object V
multiGet(Collection<K> keys) 获取集合【mget】 List<V>
increment(K key) 自增操做(键不存在则建立并按照初始值0自增)【incr】 Long
increment(K key, long delta) 增长数操做【incrby】 Long
increment(K key, double delta) 增长浮点数【incrbyfloat】 Double
decrement(K key) 自减【decr】 Long
decrement(K key, long delta) 减去操做【decrby】 Long
append(K key, String value) 追加值【append】 Integer
get(K key, long start, long end) 获取指定位置的字符【getrange】 String
set(K key, V value, long offset) 设置指定位置的字符(覆盖后面的长度)【setrange】 void
size(K key) 值长度【strlen】 Long
setBit(K key, long offset, boolean value) 设置或者清除指定位置的值(二进制)【setbit】 Boolean
getBit(K key, long offset) 获取比特位的值 Boolean
bitField(K key, BitFieldSubCommands subCommands) 见下方说明 List<Long>
getOperations()   RedisOperations<K, V>
  • setBit和getBit都是对二进制进行操做。由于redis储存的字符串都是以二进制的形式存在,因此这里是设置二进制偏移位置上的值,将其设置为0或1app

  • 二进制数系统中,每一个0或1就是一个比特位(bit),位是数据存储的最小单位编码

  • 好比字符‘a’的ASII码是97,转换为二进制是01100001spa

  • 二进制数的一位所包含的信息就是一比特,如二进制数0100就是4比特code

  • 字符-字节-比特,每一个字符根据编码占用字节不一样,8比特(bit)为1字节blog

  • BITFIELD 该命令将 Redis 字符串视为一个位数组,而且可以处理具备不一样位宽和任意非(必要)对齐偏移量的特定整数字段。实际上,使用此命令能够将位偏移量为1234的带符号5位整数设置为特定值,从偏移量4567中检索31位无符号整数。rem

  • BITFIELD 可以在同一个命令调用中使用多位字段。它须要执行一系列操做,并返回一个响应数组,其中每一个数组都与参数列表中的相应操做相匹配。字符串

  • 如下命令将位偏移量为100的8位有符号整数加1,并在位偏移量0处获取4位无符号整数的值get

> BITFIELD mykey INCRBY i5 100 1 GET u4 0 1) (integer) 1 2) (integer) 0 

支持的子命令和整数类型

  • GET <type> <offset> - 返回指定的位域。
  • SET <type> <offset> <value> - 设置指定的位域并返回其旧值。
  • INCRBY <type> <offset> <increment> - 递增或递减(若是给定负递增)指定的位域并返回新值。

还有一个子命令经过设置溢出行为来改变连续的 INCRBY子 命令调用的行为:

  • OVERFLOW [WRAP|SAT|FAIL]在指望整数类型的状况下,能够经过i为有符号整数和u无符号整数加上整数类型的位数来构成它。例如u8,一个8位的无符号整数,i16是一个16位的有符号整数。支持的类型对于有符号整数最多为64位,对于无符号整数最多为63位。使用无符号整数的限制是因为当前Redis协议没法将64位无符号整数做为答复返回。位和位置偏移有两种方式能够指定位域命令中的偏移量。若是指定了一个没有任何前缀的数字,它将被用做字符串内的基于零的位偏移量。可是若是偏移量前缀为a#字符,指定的偏移量乘以整数类型的宽度,例如:BITFIELD mystring SET i8#0 100 i8#1 200将设置第一个i8整数在偏移量0和第二个偏移量为8.这种方式你没有若是你想要的是一个给定大小的整数数组,你能够在你的客户端内部进行数学运算。溢出控制使用该OVERFLOW命令,用户能够经过指定一个来微调增量的行为或减小溢出(或下溢)如下行为:
  • WRAP:环绕,包含有符号和无符号整数。在无符号整数的状况下,包装相似于以整数能够包含的最大值(C标准行为)来执行操做。使用带符号整数,而不是包装意味着溢出从新开始朝向最负值,而且溢出朝向最正值,例如,若是i8整数设置为127,则将其递增1 -128。
  • SAT:使用饱和算术,即在下溢时将该值设置为最小整数值,并在溢出时将其设置为最大整数值。例如,i8从数值120开始递增一个以10 为增量的整数将致使数值127,而且进一步增量将始终使数值保持在127.在下溢时发生一样的状况,可是朝向该数值被阻塞在最大负值。
  • FAIL:在这种模式下,没有检测到溢出或下溢操做。相应的返回值设置为 NULL,以向调用者发送信号。 请注意,每条OVERFLOW语句只影响子命令列表中后面的 INCRBY命令,直到下一条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 2) (integer) 3
相关文章
相关标签/搜索