1.setkey


加入版本1.0.0。

时间复杂度:O(1)。


将key和value对应。如果key已经存在了,它会被覆盖,而不管它是什么类型。

返回值

状态码:总是OK,因为SET不会失败。

redis_exporter metrics说明 redisgetreply_数据库



2.getkey


加入版本1.0.0。

时间复杂度:O(1)。


返回key的value。如果key不存在,返回特殊值nil。如果key的value不是string,就返回错误,因为GET只处理string类型的values。

返回值

Bulk reply:key对应的value,或者nil(key不存在时)


redis_exporter metrics说明 redisgetreply_数据库_02



3.append key value



加入版本2.0.0。

时间复杂度:O(1).The amortized time complexity isO(1)因为redis用的动态字符串的库在每次分配空间的时候会增加一倍的可用空闲空间,所以在添加的value较小而且已经存在的 value是任意大小的情况下,均摊时间复杂度是O(1)。


key已经存在,并且值为字符串,那么这个命令会把value追加到原来值(value)的结尾。 如果key不存在,那么它将首先创建一个空字符串的key,再执行追加操作,这种情况APPEND将类似于SET操作。

返回值

整数回复(Integer reply):返回append后字符串值(value)的长度。


redis_exporter metrics说明 redisgetreply_设计模式_03

4.decrkey

加入版本1.0.0。

时间复杂度:O(1)。

对key对应的数字做减1操作。如果key不存在,那么在操作之前,这个key对应的值会被置为0。如果key有一个错误类型的value或者是一个不能表示成数字的字符串,就返回错误。这个操作最大支持在64位有符号的整型数字。

查看命令INCR了解关于增减操作的额外信息。

返回值

数字:减小之后的value


redis_exporter metrics说明 redisgetreply_整型_04


5.incrvalue


加入版本1.0.0。

时间复杂度:O(1)。


对key对应的数字做加1操作。如果key不存在,那么在操作之前,这个key对应的值会被置为0。如果key有一个错误类型的value或者是一个不能表示成数字的字符串,就返回错误。这个操作最大支持在64位有符号的整型数字。

提醒:这是一个string操作,因为Redis没有专用的数字类型。key对应的string都被解释成10进制64位有符号的整型来执行这个操作。

Redis会用相应的整数表示方法存储整数,所以对于表示数字的字符串,没必要为了用字符串表示整型存储做额外开销。

返回值:

整型数字:增加之后的value


redis_exporter metrics说明 redisgetreply_数据库_05

6.

decrby key decrment


加入版本1.0.0。

时间复杂度:O(1)。


将key对应的数字减decrement。如果key不存在,操作之前,key就会被置为0。如果key的value类型错误或者是个不能表示成数字的字符串,就返回错误。这个操作最多支持64位有符号的正型数字。

查看命令INCR了解关于增减操作的额外信息。似。

返回值:

返回一个数字:减少之后的value值。


redis_exporter metrics说明 redisgetreply_字符串_06

7.incrby key increment


加入版本1.0.0。

时间复杂度:O(1)。


将key对应的数字加decrement。如果key不存在,操作之前,key就会被置为0。如果key的value类型错误或者是个不能表示成数字的字符串,就返回错误。这个操作最多支持64位有符号的正型数字。

查看命令INCR了解关于增减操作的额外信息。

返回值

数字:增加之后的value值。




redis_exporter metrics说明 redisgetreply_设计模式_07

8.getrange key start end


入版本2.4.0。

时间复杂度:O(N) ,这里的N是返回的string的长度。复杂度是由返回的字符串长度决定的,但是因为从一个已经存在的字符串创建一个子串是很容易的,所以对于较小的字符串,可以认为是O(1)的复杂度。


警告:这个命令是被改成GETRANGE的,在小于2.0的Redis版本中叫SUBSTR。 返回key对应的字符串value的子串,这个子串是由start和end位移决定的(两者都在string内)。可以用负的位移来表示从string尾部开始数的下标。所以-1就是最后一个字符,-2就是倒数第二个,以此类推。

这个函数处理超出范围的请求时,都把结果限制在string内。

返回值:

Bulk reply(专有词汇,protocol有解释)。


redis_exporter metrics说明 redisgetreply_时间复杂度_08

9.getset key value


加入版本1.0.0。

时间复杂度:O(1)。


自动将key对应到value并且返回原来key对应的value。如果key存在但是对应的value不是字符串,就返回错误。

设计模式

GETSET可以和INCR一起使用实现支持重置的计数功能。举个例子:每当有事件发生的时候,一段程序都会调用INCR给key mycounter加1,但是有时我们需要获取计数器的值,并且自动将其重置为0。这可以通过GETSET mycounter "0"来实现:




redis_exporter metrics说明 redisgetreply_时间复杂度_09

10.mset key value [key value```]


加入版本1.0.1。

时间复杂度:O(N),这里N是要set的key的个数。


对应给定的keys到他们相应的values上。MSET会用新的value替换已经存在的value,就像普通的SET命令一样。如果你不想覆盖已经存在的values,请参看命令MSETNX

MSET是原子的,所以所有给定的keys是一次性set的。客户端不可能看到这种一部分keys被更新而另外的没有改变的情况。

返回值

状态码:总是OK,因为MSET不会失败。


redis_exporter metrics说明 redisgetreply_数据库_10


11.mget key key```


加入版本1.0.0。

时间复杂度:O(N),这里N是要处理的key的个数。


返回所有指定的key的value。对于每个不对应string或者不存在的key,都返回特殊值nil。正因为此,这个操作从来不会失败。

返回值

多返回值: 指定的key对应的values的list


redis_exporter metrics说明 redisgetreply_整型_11


12.setex key seconds value


加入版本2.0.0。

时间复杂度:O(1)。


设置key对应字符串value,并且设置key在给定的seconds时间之后超时过期。这个命令等效于执行下面的命令:

SET mykey value
EXPIRE mykey seconds

SETEX是原子的,也可以通过把上面两个命令放到MULTI/EXEC块中执行的方式重现。相比连续执行上面两个命令,它更快,因为当Redis当做缓存使用时,这个操作更加常用。

返回值

状态码


redis_exporter metrics说明 redisgetreply_数据库_12


13.setnx key value


加入版本1.0.0。

时间复杂度:O(1)。


如果key不存在,就设置key对应字符串value。在这种情况下,该命令和SET一样。当key已经存在时,就不做任何操作。SETNX是"SET if Not eXists"。

返回值

数字,只有以下两种值:

  • 1如果key被set
  • 0如果key没有被set

redis_exporter metrics说明 redisgetreply_设计模式_13


14.msetnx key value key value```


加入版本1.0.1。

时间复杂度:O(N),N是要set的keys的个数。


对应给定的keys到他们相应的values上。只要有一个key已经存在,MSETNX一个操作都不会执行。 由于这种特性,MSETNX可以实现要么所有的操作都成功,要么一个都不执行,这样可以用来设置不同的key,来表示一个唯一的对象的不同字段。

MSETNX是原子的,所以所有给定的keys是一次性set的。客户端不可能看到这种一部分keys被更新而另外的没有改变的情况。

返回值

数字,只有以下两种值:

  • 1如果所有的key被set
  • 0如果没有key被set(至少其中有一个key是存在的)

redis_exporter metrics说明 redisgetreply_时间复杂度_14


15.setrange key offset value


加入版本2.2.0。

时间复杂度:O(1),不考虑拷贝新字符串的开销。通常这个字符串非常小,所以均摊代价为O(1)。如果考虑的话,复杂度就是O(M),M是参数value的长度。


这个命令的作用是覆盖key对应的string的一部分,从指定的offset处开始,覆盖value的长度。如果offset比当前key对应string还要长,那这个string后面就补0以达到offset。不存在的keys被认为是空字符串,所以这个命令可以确保key有一个足够大的字符串,能在offset处设置value。

29-1(536870911),因为redis字符串限制在512M大小。如果你需要超过这个大小,你可以用多个keys。

警告:当set最后一个字节并且key还没有一个字符串value或者其value是个比较小的字符串时,Redis需要立即分配所有内存,这有可能会导致服务阻塞一会。在一台2010MacBook Pro上,set536870911字节(分配512MB)需要~300ms,set134217728字节(分配128MB)需要~80ms,set33554432比特位(分配32MB)需要~30ms,set8388608比特(分配8MB)需要8ms。注意,一旦第一次内存分配完,后面对同一个key调用SETRANGE就不会预先得到内存分配。

模式

正因为有了SETRANGE和类似功能的GETRANGE命令,你可以把Redis的字符串当成线性数组,随机访问只要O(1)复杂度。这在很多真实场景应用里非常快和高效。

返回值

数字:该命令修改后的字符串长度


redis_exporter metrics说明 redisgetreply_数据库_15


16.strlen key


加入版本2.2.0。

时间复杂度:O(1)。


返回key的string类型value的长度。如果key对应的非string类型,就返回错误。

返回值

整型数字:key对应的字符串value的长度,或者0(key不存在)


redis_exporter metrics说明 redisgetreply_时间复杂度_16


注:本文的命令详解主要来源redis中文官网,这里是进一步整理供学习和以后查询使用。