Redis 命令详解:Strings

栏目: 数据库 · 发布时间: 5年前

内容简介:点赞是一种美德~

String类型是 Redis 中比较常用的类型,因此,和String相关的命令也比较多

APPEND

最早可用版本2.0.0

当指定的key存在,并且value是字符串时,APPEND命令会在字符串末尾追加指定的字符串,如果指定的key不存在,则会创建一个空的字符串,并且追加上指定的value,效果类似于SET命令。

该命令的返回值是执行后字符串的长度。

1127.0.0.1:6379> EXISTS mykey 2(integer) 0 3127.0.0.1:6379> APPEND mykey Jackeyzhe 4(integer) 9 5127.0.0.1:6379> APPEND mykey 2018 6(integer) 13 7127.0.0.1:6379> GET mykey 8"Jackeyzhe2018" 

APPEND常被用作为定长的数据提供紧凑的存储。可以通过GETRANGE命令来获取指定长度范围的字符串,这里推荐使用Unix的时间戳作为key,既不会因为单个key过大而影响效率,又节省了大量命名空间。

BITCOUNT

最早可用版本2.6.0

该命令的时间复杂度是O(N),用来统计字符串中被设置为1的比特数。默认检查整个字符串,当然也可以指定起始和结束位置。起始和结束位置可以是负数,例如-1表示最后一个字节,-2表示倒数第二字节,以此类推。

1127.0.0.1:6379> SETBIT bitkey 0 1   #0001 2(integer) 0 3127.0.0.1:6379> BITCOUNT bitkey 4(integer) 1 5127.0.0.1:6379> SETBIT bitkey 2 1   #0101 6(integer) 0 7127.0.0.1:6379> BITCOUNT bitkey 8(integer) 2 

这个命令可以用来统计实时的数据。例如,统计用户上线历史,我们可以使用用户名作为key,如果第n天上线,将对应的第n位置为1。这样,即使统计10年的数据,每个用户所使用的内存空间仅仅是456字节。对于这样的数据量来讲,BITCOUNT处理的速度和其他时间复杂度为O(1)的命令是一个数量级的。

BITFIELD

最早可用版本3.2.0

用法:

1BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL] 

这个命令把Redis的字符串看作是一个bit数组。可以把指定偏移位置的bit当做指定的类型处理。例如,以下命令是对偏移量100的8位有符号整数增1,获取偏移量为0的4位无符号整数。

1> BITFIELD mykey INCRBY i8 100 1 GET u4 0 21) (integer) 1 32) (integer) 0 

该命令支持的子命令有:

  • GET

  • SET

  • INCRBY

另外还有一个OVERFLOW命令用来进行INCRBY后的益处控制。下面是OVERFLOW的三种控制方法,默认为WRAP算法。

  • WRAP:回环算法,适用于有符号和无符号两种类型。对于无符号整型,回环计数将对整型最大值进行取模操作;对有符号整数,上溢从最小负数开始,下溢从最大正数开始。例如,i8最大为127,加1后变成-128。

  • SAT:饱和算法,上溢后保持最大整数,下溢后保持最小整数。

  • FAIL:失败算法,这种模式下发生上溢或者下溢,不会做任何操作,返回值为NULL。

该命令的偏移量有两种指定方式,如果是不带前缀的数字,则以字符串位计算,如果数字前有#前缀,则计算偏移量时应该指定数字乘以整型宽度。

BITOP

最早可用版本:2.6.0

时间复杂度:O(N)

用法:

1BITOP operation destkey key [key ...] 

对一个或者字符串进行位操作,支持与(AND)、或(OR)、非(NOT)、异或(XOR)操作。除了非操作,其他的都支持多个key作为输入。对于长度不同的字符串,较短的字符串缺少的部分会以0补齐,空key也会被看作全部为0的字符串序列。

该命令返回保存到destkey的字符串长度,也就是输入字符串的最大长度。

1127.0.0.1:6379> set key1 "abcde" 2OK 3127.0.0.1:6379> set key2 "abcd" 4OK 5127.0.0.1:6379> BITOP and dest key1 key2 6(integer) 5 7127.0.0.1:6379> get dest 8"abcd\x00" 

BITPOS

最早可用版本:2.8.7

时间复杂度:O(N)

用法:

1BITPOS key bit [start] [end] 

该命令用于返回第一个被设置为0或1的位置。可以使用start和end参数指定查询范围,需要注意的是,这个范围指的是字节范围而不是位范围,也就是说start=0,end=2表示在前三个字节中查找。start和end都可以为负值,-1表示最后一位,-2表示倒数第二位,以此类推。

我们通过一些例子来看一下某些特殊情况下的返回值。

 1127.0.0.1:6379> set mykey ""  2OK  3127.0.0.1:6379> get mykey  4""  5127.0.0.1:6379> bitpos mykey 0  6(integer) -1  7127.0.0.1:6379> bitpos mykey 1  8(integer) -1  9127.0.0.1:6379> set key1 "\xff" 10OK 11127.0.0.1:6379> bitpos key1 1 12(integer) 0 13127.0.0.1:6379> bitpos key1 0 14(integer) 8 

如果是空字符串,那么查找0和1都会返回-1。如果是类似"\xff"这样的字符串,它的0-7位都是1,如果查询0时,会返回再往右数一位也就是第8位。

DECR

最早可用版本:1.0.0

时间复杂度:O(1)

对指定的key进行减1操作,操作数最大为64位有符号整数。如果key不存在,则会先将其设置为0,如果类型不符合,则会抛出错误。

1127.0.0.1:6379> GET unexist 2(nil) 3127.0.0.1:6379> DECR unexist 4(integer) -1 5127.0.0.1:6379> SET mykey "fdsfe" 6OK 7127.0.0.1:6379> DECR mykey 8(error) ERR value is not an integer or out of range 

DECRBY

最早可用版本:1.0.0

时间复杂度:O(1)

这个命令与DECR的参数要求和使用方法相同,唯一不同的是它用来减去指定的数值。

GET

最早可用版本:1.0.0

时间复杂度:O(1)

这个不做过多介绍,是最常用的命令之一。返回指定key的值,如果不是字符串,就返回错误。

GETBIT

最早可用版本:2.2.0

时间复杂度:O(1)

返回指定偏移量位的bit值,当key不存在时,返回0。

GETRANGE

最早可用版本:2.4.0

时间复杂度:O(N)

用法:

1GETRANGE key start end 

这个命令在Redis2.0之前叫做SUBSTR,返回指定的key的指定范围(包含start和end)的子串。start和end同样也可以是负数,这点可以参考BITPOS命令。

GETSET

最早可用版本:1.0.0

时间复杂度:O(1)

自动把新的value保存到指定key中,并且返回旧的value。如果key存在,但是保存的数据不是字符串则会报错。

INCR

最早可用版本:1.0.0

时间复杂度:O(1)

该命令用于对指定key进行加1操作,与DECR命令正好相反。执行此操作时,字符串被解析为10进制的64位有符号整数。由于Redis内部有整数形式(integer representation)来保存整数,因此不会有整数存储为字符串的额外开销。

INCRBY

最早可用版本:1.0.0

时间复杂度:O(1)

它与INCR命令的关系就像DECR命令和DECRBY命令的关系一样,只是指定了要加的数值。

INCRBYFLOAT

最早可用版本:2.6.0

时间复杂度:O(1)

该命令会把字符串解析为浮点数,然后加上指定的浮点数。如果value不是字符串类型或者不能解析为浮点数,则会报错。返回值的精度为小数点后17位。其内部以科学计数法的形式存储。

MGET

最早可用版本:1.0.0

时间复杂度:O(N),N为取回key的个数

该命令返回多个key的值,对于不是string类型或者不存在的key,都返回nil。

MSET

最早可用版本:1.0.1

时间复杂度:O(N),N为需要设置的key的个数

设置所有的key,如果已经存在,则覆盖旧值。MSET命令是原子操作,并且不会失败。

MSETNX

最早可用版本:1.0.1

时间复杂度:O(N),N为需要设置的key的个数

设置所有的key,如果有一个key已经存在,则所有的key都会设置不成功。返回1表示所有的key都已经设置成功,返回0表示所有的key都没有设置成功。

PSETEX

最早可用版本:2.6.0

时间复杂度:O(1)

用法:

1PSETEX key milliseconds value 

该命令类似于SETEX(在后面介绍),唯一不同的时,该命令设置过期时间以毫秒为单位。

SET

最早可用版本:1.0.0

时间复杂度:O(1)

用法:

1SET key value [EX seconds] [PX milliseconds] [NX|XX] 

也是最常用的命令之一。在2.6.12版本,SET命令加上了一些参数:

  • EX seconds – 设置键key的过期时间,单位时秒

  • PX milliseconds – 设置键key的过期时间,单位时毫秒

  • NX – 只有键key不存在的时候才会设置key的值

  • XX – 只有键key存在的时候才会设置key的值

加上这参数之后,SET命令已经取代了SETNX、SETEX、PSETEX这三个命令,因此,Redis不再推荐使用这些命令,并且有可能在未来版本中抛弃这些命令。

SETBIT

最早可用版本:2.2.0

时间复杂度:O(1)

用法:

1SETBIT key offset value 

设置指定位置的bit值。当key不存在时,会先生成一个字符串,这个字符串必须保证offset处有值。offset必须大于0,小于2 32 (因为bitmap的大小限制为512M)。

SETEX

最早可用版本:2.0.0

时间复杂度:O(1)

为指定key设置value,并且给定超时时间(单位是秒),SETEX是原子操作。

SETNX

最早可用版本:1.0.0

时间复杂度:O(1)

SETNX是"SET if Not Exist"的缩写,也就是说,当key不存在时,才会SET成功,成功返回1,失败返回0。

SETRANGE

最早可用版本:2.2.0

时间复杂度:O(1)

这个命令用来覆盖key的一部分内容,如果offset超出value的长度,则会为string补0。offset最大值是2 29 -1 (536870911)。

1127.0.0.1:6379> SET follow jackey 2OK 3127.0.0.1:6379> SETRANGE follow 8 lol 4(integer) 11 5127.0.0.1:6379> GET follow 6"jackey\x00\x00lol" 

STRLEN

最早可用版本:2.2.0

时间复杂度:O(1)

返回指定key存储的value的长度,如果value不是字符串,则会报错。如果key不存在,则返回0。

Redis 命令详解:Strings

点赞是一种美德~


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java与模式

Java与模式

阎宏 编著 / 电子工业出版社 / 2002-10 / 88.00元

《Java与模式》是一本讲解设计原则以及最为常见的设计模式的实用教材,目的是为了工作繁忙的Java系统设计师提供一个快速而准确的设计原则和设计模式的辅导。全书分为55章,第一个章节讲解一个编编程模式,说明此模式的用意、结构,以及这一模式适合于什么样的情况等。每一个章节都附有多个例子和练习题,研习这些例子、完成这些练习题可以帮助读者更好地理解所讲的内容。大多数的章节都是相对独立的,读者可以从任何一章......一起来看看 《Java与模式》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换