phpredis中文手册——《redis中文手册》 php版



将值value关联到key,并将key的生存时间设为seconds(以秒为单位)。

这个命令类似于以下两个命令:

O(1)

SETRANGE

SETRANGE key offset value

用value参数覆写(Overwrite)给定key所储存的字符串值,从偏移量offset开始。

不存在的key当作空白字符串处理。

SETRANGE命令会确保字符串足够长以便将value设置在指定的偏移量上,如果给定key原来储存的字符串长度比偏移量小(比如字符串只有5个字符长,但你设置的offset是10),那么原字符和偏移量之间的空白将用零比特(zerobytes,”\x00″)来填充。

注意你能使用的最大偏移量是2^29-1(536870911),因为Redis的字符串被限制在512兆(megabytes)内。如果你需要使用比这更大的空间,你得使用多个key。

修改之后,字符串的长度。

警告
当生成一个很长的字符串时,Redis需要分配内存空间,该操作有时候可能会造成服务器阻塞(block)。在2010年的Macbook Pro上,设置偏移量为536870911(512MB内存分配),耗费约300毫秒, 设置偏移量为134217728(128MB内存分配),耗费约80毫秒,设置偏移量33554432(32MB内存分配),耗费约30毫秒,设置偏移量为8388608(8MB内存分配),耗费约8毫秒。 注意若首次内存分配成功之后,再对同一个key调用SETRANGE操作,无须再重新内存。

MSET
MSET key value [key value …]

同时设置一个或多个key-value对。

O(N),

为要设置的

数量。

总是返回

(因为

不可能失败)

MSETNX

MSETNX key value [key value …]

同时设置一个或多个key-value对,当且仅当key不存在。

MSETNX是原子性的,因此它可以用作设置多个不同key表示不同字段(field)的唯一性逻辑对象(unique logic object),所有字段要么全被设置,要么全不被设置。

O(N),

为要设置的

的数量。

APPEND

APPEND key value

平摊复杂度O(1)

之后,

中字符串的长度。

GET

GET key

返回key所关联的字符串值。

如果key不存在则返回特殊值nil。

O(1)

MGET

MGET key [key …]

返回所有(一个或多个)给定key的值。

如果某个指定key不存在,那么返回特殊值nil。因此,该命令永不失败。

O(1)

一个包含所有给定

的值的列表。

GETRANGE

GETRANGE key start end

返回key中字符串值的子字符串,字符串的截取范围由start和end两个偏移量决定(包括start和end在内)。

负数偏移量表示从字符串最后开始计数,-1表示最后一个字符,-2表示倒数第二个,以此类推。

截取得出的子字符串。

注解:在

GETSET

GETSET key value

将给定key的值设为value,并返回key的旧值。

当key存在但不是字符串类型时,返回一个错误。

O(1)

设计模式

举例来说,每次当某个事件发生时,进程可能对一个名为mycount的key调用INCR操作,通常我们还要在一个原子时间内同时完成获得计数器的值和将计数器值复位为0两个操作。

可以用命令GETSET mycounter 0来实现这一目标。

STRLEN

STRLEN key

返回key所储存的字符串值的长度。

当key储存的不是字符串值时,返回一个错误。

复杂度:O(1)返回值:

INCR

INCR key

将key中储存的数字值增一。

如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

本操作的值限制在64位(bit)有符号数字表示之内。

O(1)

命令之后

的值。

注解:这是一个针对字符串的操作,因为Redis没有专用的整数类型,所以key内储存的字符串被解释为十进制64位有符号整数来执行INCR操作。

INCRBY

INCRBY key increment

将key所储存的值加上增量increment。

如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

本操作的值限制在64位(bit)有符号数字表示之内。

O(1)

之后,

的值。

DECR

DECR key

将key中储存的数字值减一。

如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

本操作的值限制在64位(bit)有符号数字表示之内。

O(1)

命令之后

的值。

DECRBY

DECRBY key decrement

将key所储存的值减去减量decrement。

如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

本操作的值限制在64位(bit)有符号数字表示之内。

O(1)

之后,

的值。

SETBIT

SETBIT key offset value

对key所储存的字符串值,设置或清除指定偏移量上的位(bit)。

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

当key不存在时,自动生成一个新的字符串值。

字符串会增长(grown)以确保它可以将value保存在指定的偏移量上。当字符串值增长时,空白位置以0填充。

offset参数必须大于或等于0,小于2^32(bit映射被限制在512MB内)。

O(1)

指定偏移量原来储存的位(”0″或”1″).

GETBIT

GETBIT key offset

对key所储存的字符串值,获取指定偏移量上的位(bit)。

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

O(1)

字符串值指定偏移量上的位(bit)。

HSET

HSET key field value

将哈希表key中的域field的值设为value。

如果域field已经存在于哈希表中,旧值将被覆盖。

O(1)

HSETNX

HSETNX key field value

将哈希表key中的域field的值设置为value,当且仅当域field不存在。

若域field已经存在,该操作无效。

O(1)

HMSET

HMSET key field value [field value …]

同时将多个field – value(域-值)对设置到哈希表key中。

此命令会覆盖哈希表中已存在的域。

O(N),

对的数量。

HGET

HGET key field

返回哈希表key中给定域field的值。

O(1)

HMGET

HMGET key field [field …]

返回哈希表key中,一个或多个给定域的值。

如果给定的域不存在于哈希表,那么返回一个nil值。

O(N),

为给定域的数量。

一个包含多个给定域的关联值的表,表值的排列顺序和给定域参数的请求顺序一样。

HGETALL

HGETALL key

返回哈希表key中,所有的域和值。

在返回值里,紧跟每个域名(field name)之后是域的值(value),所以返回值的长度是哈希表大小的两倍。

O(N),

为哈希表的大小。

以列表形式返回哈希表的域和域的值。 若

不存在,返回空列表。

HDEL

HDEL key field [field …]

删除哈希表key中的一个或多个指定域,不存在的域将被忽略。

O(N),

为要删除的域的数量。

被成功移除的域的数量,不包括被忽略的域。

HLEN

HLEN key

返回哈希表key中域的数量。

O(1)

HEXISTS

HEXISTS key field

查看哈希表key中,给定域field是否存在。

O(1)

HINCRBY

HINCRBY key field increment

为哈希表key中的域field的值加上增量increment。

增量也可以为负数,相当于对给定域进行减法操作。

如果域field不存在,那么在执行命令前,域的值被初始化为0。

本操作的值限制在64位(bit)有符号数字表示之内。

O(1)

命令之后,哈希表

的值。

HKEYS

HKEYS key

返回哈希表key中的所有域。

O(N),

为哈希表的大小。

HVALS

HVALS key

返回哈希表key中的所有值。

O(N),

为哈希表的大小。

头元素和尾元素

头元素指的是列表左端/前端第一个元素,尾元素指的是列表右端/后端第一个元素。

举个例子,列表list包含三个元素:x, y, z,其中x是头元素,而z则是尾元素。

空列表

指不包含任何元素的列表,Redis将不存在的key也视为空列表。

LPUSH

LPUSH key value [value …]

将一个或多个值value插入到列表key的 表头

如果有多个value值,那么各个value值按从左到右的顺序依次插入到表头:比如对一个空列表(mylist)执行LPUSH mylist a b c,则结果列表为c b a,等同于执行执行命令LPUSH mylist a、LPUSH mylist b、LPUSH mylist c。

当key存在但不是列表类型时,返回一个错误。

O(1)

命令后,列表的长度。

LPUSHX

LPUSHX key value

将值value插入到列表key的表头,当且仅当key存在并且是一个列表。

O(1)

命令执行之后,表的长度。

RPUSH

RPUSH key value [value …]

将一个或多个值value插入到列表key的 表尾

如果有多个value值,那么各个value值按从左到右的顺序依次插入到表尾:比如对一个空列表(mylist)执行RPUSH mylist a b c,则结果列表为a b c,等同于执行命令RPUSH mylist a、RPUSH mylist b、RPUSH mylist c。

当key存在但不是列表类型时,返回一个错误。

O(1)

操作后,表的长度。

RPUSHX

RPUSHX key value

将值value插入到列表key的表尾,当且仅当key存在并且是一个列表。

O(1)

命令执行之后,表的长度。

LPOP

LPOP key

移除并返回列表key的头元素。

O(1)

RPOP

RPOP key

移除并返回列表key的尾元素。

O(1)

BLPOP

BLPOP key [key …] timeout

当给定多个key参数时,按参数key的先后顺序依次检查各个列表,弹出第一个非空列表的头元素。

非阻塞行为

假设现在有job、 command和request三个列表,其中job不存在,command和request都持有非空列表。考虑以下命令:

BLPOP job command request 0

阻塞行为

超时参数timeout接受一个以秒为单位的数字作为值。超时参数设为0表示阻塞时间可以无限期延长(block indefinitely) 。

相同的key被多个客户端同时阻塞

在MULTI/EXEC事务中的BLPOP

BLPOP可以用于流水线(pipline,批量地发送多个命令并读入多个回复),但把它用在MULTI/EXEC块当中没有意义。因为这要求整个服务器被阻塞以保证块执行时的原子性,该行为阻止了其他客户端执行LPUSHRPUSH命令。

时间复杂度:O(1) 返回值:

BRPOP

BRPOP key [key …] timeout

当给定多个key参数时,按参数key的先后顺序依次检查各个列表,弹出第一个非空列表的尾部元素。

O(1)

LLEN

LLEN key

返回列表key的长度。

如果key不存在,则key被解释为一个空列表,返回0.

如果key不是列表类型,返回一个错误。

O(1)

的长度。

LRANGE

LRANGE key start stop

返回列表key中指定区间内的元素,区间以偏移量start和stop指定。

下标(index)参数start和stop都以0为底,也就是说,以0表示列表的第一个元素,以1表示列表的第二个元素,以此类推。

你也可以使用负数下标,以-1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推。

注意LRANGE命令和编程语言区间函数的区别

假如你有一个包含一百个元素的列表,对该列表执行LRANGE list 0 10,结果是一个包含11个元素的列表,这表明stop下标也在LRANGE命令的取值范围之内(闭区间),这和某些语言的区间函数可能不一致,比如Ruby的Range.new、Array#slice和Python的range()函数。

超出范围的下标

超出范围的下标值不会引起错误。

如果stop下标比end下标还要大,Redis将stop的值设置为end。

O(S+N),

为偏移量

为指定区间内元素的数量。

一个列表,包含指定区间内的元素。

LREM

LREM key count value

根据参数count的值,移除列表中与参数value相等的元素。

的值可以是以下几种:

  • count >0: 从表头开始向表尾搜索,移除与value相等的元素,数量为count。
  • count <0: 从表尾开始向表头搜索,移除与value相等的元素,数量为count的绝对值。
  • count =0: 移除表中所有与value相等的值。

O(N),

为列表的长度。

LSET

LSET key index value

将列表key下标为index的元素的值甚至为value。

操作成功返回

,否则返回错误信息

LTRIM

LTRIM key start stop

对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。

举个例子,执行命令LTRIM list 0 2,表示只保留列表list的前三个元素,其余元素全部删除。

下标(index)参数start和stop都以0为底,也就是说,以0表示列表的第一个元素,以1表示列表的第二个元素,以此类推。

你也可以使用负数下标,以-1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推。

当key不是列表类型时,返回一个错误。

这个例子模拟了一个日志程序,每次将最新日志newest_log放到log列表中,并且只保留最新的100项。注意当这样使用LTRIM命令时,时间复杂度是O(1),因为平均情况下,每次只有一个元素被移除。

注意LTRIM命令和编程语言区间函数的区别

假如你有一个包含一百个元素的列表list,对该列表执行LTRIM list 0 10,结果是一个包含11个元素的列表,这表明stop下标也在LTRIM命令的取值范围之内(闭区间),这和某些语言的区间函数可能不一致,比如Ruby的Range.new、Array#slice和Python的range()函数。

超出范围的下标

超出范围的下标值不会引起错误。

如果start下标比列表的最大下标end(LLEN list减去1)还要大,或者start > stop,LTRIM返回一个空列表(因为LTRIM已经将整个列表清空)。

如果stop下标比end下标还要大,Redis将stop的值设置为end。

O(N),

为被移除的元素的数量。

LINDEX

LINDEX key index

返回列表key中,下标为index的元素。

下标(index)参数start和stop都以0为底,也就是说,以0表示列表的第一个元素,以1表示列表的第二个元素,以此类推。

你也可以使用负数下标,以-1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推。

如果key不是列表类型,返回一个错误。

LINSERT

LINSERT key BEFORE|AFTER pivot value

将值value插入到列表key当中,位于值pivot之前或之后。

当pivot不存在于列表key时,不执行任何操作。

当key不存在时,key被视为空列表,不执行任何操作。

如果key不是列表类型,返回一个错误。

O(N),

为寻找

过程中经过的元素数量。

RPOPLPUSH

RPOPLPUSH source destination

  • 将列表source中的最后一个元素(尾元素)弹出,并返回给客户端。
  • 将source弹出的元素插入到列表destination,作为destination列表的的头元素。

举个例子,你有两个列表source和destination,source列表有元素a, b, c,destination列表有元素x, y, z,执行RPOPLPUSH source destination之后,source列表包含元素a, b,destination列表包含元素c, x, y, z ,并且元素c被返回。

如果source不存在,值nil被返回,并且不执行其他动作。

如果source和destination相同,则列表中的表尾元素被移动到表头,并返回该元素,可以把这种特殊情况视作列表的旋转(rotation)操作。

O(1)

被弹出的元素。

设计模式: 一个安全的队列

Redis的列表经常被用作队列(queue),用于在不同程序之间有序地交换消息(message)。一个程序(称之为生产者,producer)通过LPUSH命令将消息放入队列中,而另一个程序(称之为消费者,consumer)通过RPOP命令取出队列中等待时间最长的消息。

不幸的是,在这个过程中,一个消费者可能在获得一个消息之后崩溃,而未执行完成的消息也因此丢失。

使用RPOPLPUSH命令可以解决这个问题,因为它在返回一个消息之余,还将该消息添加到另一个列表当中,另外的这个列表可以用作消息的备份表:假如一切正常,当消费者完成该消息的处理之后,可以用LREM命令将该消息从备份表删除。

BRPOPLPUSH

BRPOPLPUSH source destination timeout

超时参数timeout接受一个以秒为单位的数字作为值。超时参数设为0表示阻塞时间可以无限期延长(block indefinitely) 。

O(1)

附录,常用集合运算:

A = {‘a’, ‘b’, ‘c’}
B = {‘a’, ‘e’, ‘i’, ‘o’, ‘u’}

inter(x, y): 交集,在集合x和集合y中都存在的元素。
inter(A, B) = {'a'}

union(x, y): 并集,在集合x中或集合y中的元素,如果一个元素在x和y中都出现,那只记录一次即可。
union(A,B) = {'a', 'b', 'c', 'e', 'i', 'o', 'u'}

diff(x, y): 差集,在集合x中而不在集合y中的元素。
diff(A,B) = {'b', 'c'}

card(x): 基数,一个集合中元素的数量。
card(A) = 3

空集: 基数为0的集合。

SADD

SADD key member [member …]

将一个或多个member元素加入到集合key当中,已经存在于集合的member元素将被忽略。

假如key不存在,则创建一个只包含member元素作成员的集合。

当key不是集合类型时,返回一个错误。

O(N),

是被添加的元素的数量。

被添加到集合中的

元素的数量,不包括被忽略的元素。

SREM

SREM key member [member …]

移除集合key中的一个或多个member元素,不存在的member元素会被忽略。

当key不是集合类型,返回一个错误。

O(N),

为给定

元素的数量。

被成功移除的元素的数量,不包括被忽略的元素。

SMEMBERS

SMEMBERS key

返回集合key中的所有成员。

O(N),

为集合的基数。

集合中的所有成员。

SISMEMBER

SISMEMBER key member

判断member元素是否是集合key的成员。

O(1)

SCARD

SCARD key

返回集合key的 基数(集合中元素的数量)。

O(1)

SMOVE

SMOVE source destination member

将member元素从source集合移动到destination集合。

如果source集合不存在或不包含指定的member元素,则SMOVE命令不执行任何操作,仅返回0。否则,member元素从source集合中被移除,并添加到destination集合中去。

当source或destination不是集合类型时,返回一个错误。

O(1)

SPOP

SPOP key

移除并返回集合中的一个随机元素。

O(1)

SRANDMEMBER

SRANDMEMBER key

返回集合中的一个随机元素。

O(1)

被选中的随机元素。 当

不存在或

是空集时,返回

SINTER

SINTER key [key …]

返回一个集合的全部成员,该集合是所有给定集合的 交集

不存在的key被视为空集。

当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)。

O(N * M),

为给定集合当中基数最小的集合,

为给定集合的个数。

交集成员的列表。

SINTERSTORE

SINTERSTORE destination key [key …]

如果destination集合已经存在,则将其覆盖。

destination可以是key本身。

O(N * M),

为给定集合当中基数最小的集合,

为给定集合的个数。

结果集中的成员数量。

SUNION

SUNION key [key …]

返回一个集合的全部成员,该集合是所有给定集合的 并集

不存在的key被视为空集。

O(N),

是所有给定集合的成员数量之和。

并集成员的列表。

SUNIONSTORE

SUNIONSTORE destination key [key …]

如果destination已经存在,则将其覆盖。

destination可以是key本身。

O(N),

是所有给定集合的成员数量之和。

结果集中的元素数量。

SDIFF

SDIFF key [key …]

返回一个集合的全部成员,该集合是所有给定集合的 差集

不存在的key被视为空集。

O(N),

是所有给定集合的成员数量之和。

交集成员的列表。

SDIFFSTORE

SDIFFSTORE destination key [key …]

如果destination集合已经存在,则将其覆盖。

destination可以是key本身。

O(N),

是所有给定集合的成员数量之和。

结果集中的元素数量。

ZADD

ZADD key score member [[score member] [score member] …]

将一个或多个member元素及其score值加入到有序集key当中。

如果某个member已经是有序集的成员,那么更新这个member的score值,并通过重新插入这个member元素,来保证该member在正确的位置上。

score值可以是整数值或双精度浮点数。

当key存在但不是有序集类型时,返回一个错误。

O(M*log(N)),

是有序集的基数,

为成功添加的新成员的数量。

被成功添加的

成员的数量,不包括那些被更新的、已经存在的成员。

ZREM

ZREM key member [member …]

移除有序集key中的一个或多个成员,不存在的成员将被忽略。

当key存在但不是有序集类型时,返回一个错误。

O(M*log(N)),

为有序集的基数,

为被成功移除的成员的数量。

被成功移除的成员的数量,不包括被忽略的成员。

ZCARD

ZCARD key

返回有序集key的基数。

O(1)

ZCOUNT

ZCOUNT key min max

返回有序集key中,score值在min和max之间(默认包括score值等于min或max)的成员。

O(log(N)+M),

为有序集的基数,

为值在

之间的元素的数量。

之间的成员的数量。

ZSCORE

ZSCORE key member

返回有序集key中,成员member的score值。

如果member元素不是有序集key的成员,或key不存在,返回nil。

O(1)

成员的

值,以字符串形式表示。

ZINCRBY

ZINCRBY key increment member

为有序集key的成员member的score值加上增量increment。

当key不存在,或member不是key的成员时,ZINCRBY key increment member等同于ZADD key increment member。

当key不是有序集类型时,返回一个错误。

score值可以是整数值或双精度浮点数。

O(log(N))

成员的新

值,以字符串形式表示。

ZRANGE

ZRANGE key start stop [WITHSCORES]

返回有序集key中,指定区间内的成员。

其中成员的位置按score值递增(从小到大)来排序。

O(log(N)+M),

为有序集的基数,而

为结果集的基数。

指定区间内,带有

值(可选)的有序集成员的列表。

ZREVRANGE

ZREVRANGE key start stop [WITHSCORES]

返回有序集key中,指定区间内的成员。

O(log(N)+M),

为有序集的基数,而

为结果集的基数。

指定区间内,带有

值(可选)的有序集成员的列表。

ZRANGEBYSCORE

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

返回有序集key中,所有score值介于min和max之间(包括等于min或max)的成员。有序集成员按score值递增(从小到大)次序排列。

可选的LIMIT参数指定返回结果的数量及区间(就像SQL中的SELECT LIMIT offset, count),注意当offset很大时,定位offset的操作可能需要遍历整个有序集,此过程最坏复杂度为O(N)时间。

区间及无限

举个例子:

返回所有符合条件1 < score

返回所有符合条件5 < score < 10的成员。

O(log(N)+M),

为有序集的基数,

为被结果集的基数。

指定区间内,带有

值(可选)的有序集成员的列表。

ZREVRANGEBYSCORE

ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]

返回有序集key中,score值介于max和min之间(默认包括等于max或min)的所有的成员。有序集成员按score值递减(从大到小)的次序排列。

O(log(N)+M),

为有序集的基数,

为结果集的基数。

指定区间内,带有

值(可选)的有序集成员的列表。

ZRANK

ZRANK key member

返回有序集key中成员member的排名。其中有序集成员按score值递增(从小到大)顺序排列。

排名以0为底,也就是说,score值最小的成员排名为0。

O(log(N))

ZREVRANK

ZREVRANK key member

返回有序集key中成员member的排名。其中有序集成员按score值递减(从大到小)排序。

排名以0为底,也就是说,score值最大的成员排名为0。

O(log(N))

ZREMRANGEBYRANK

ZREMRANGEBYRANK key start stop

移除有序集key中,指定排名(rank)区间内的所有成员。

区间分别以下标参数start和stop指出,包含start和stop在内。

O(log(N)+M),

为有序集的基数,而

为被移除成员的数量。

被移除成员的数量。

ZREMRANGEBYSCORE

ZREMRANGEBYSCORE key min max

移除有序集key中,所有score值介于min和max之间(包括等于min或max)的成员。

O(log(N)+M),

为有序集的基数,而

为被移除成员的数量。

被移除成员的数量。

ZINTERSTORE

ZINTERSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]

计算给定的一个或多个有序集的交集,其中给定key的数量必须以numkeys参数指定,并将该交集(结果集)储存到destination。

默认情况下,结果集中某个成员的score值是所有给定集下该成员score值之

O(NK)+O(Mlog(M)),

为给定

中基数最小的有序集,

为给定有序集的数量,

为结果集的基数。

保存到

的结果集的基数。

ZUNIONSTORE

ZUNIONSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]

计算给定的一个或多个有序集的并集,其中给定key的数量必须以numkeys参数指定,并将该并集(结果集)储存到destination。

默认情况下,结果集中某个成员的score值是所有给定集下该成员score值之

WEIGHTS

使用WEIGHTS选项,你可以为 _每个_给定有序集 _分别_指定一个乘法因子(multiplication factor),每个给定有序集的所有成员的score值在传递给聚合函数(aggregation function)之前都要先乘以该有序集的因子。

如果没有指定WEIGHTS选项,乘法因子默认设置为1。

AGGREGATE

使用AGGREGATE选项,你可以指定并集的结果集的聚合方式。

默认使用的参数SUM,可以将所有集合中某个成员的score值之 _和_作为结果集中该成员的score值;使用参数MIN,可以将所有集合中某个成员的 _最小_score值作为结果集中该成员的score值;而参数MAX则是将所有集合中某个成员的 _最大_score值作为结果集中该成员的score值。

O(N)+O(M log(M)),

为给定有序集基数的总和,

为结果集的基数。

保存到

的结果集的基数。

PUBLISH

PUBLISH channel message

将信息 message 发送到指定的频道 channel 。

O(N+M),其中

是频道

的订阅者数量,而

则是使用模式订阅(subscribed patterns)的客户端的数量。

接收到信息

的订阅者数量。

SUBSCRIBE

SUBSCRIBE channel [channel …]

订阅给定频道的信息。

O(N),其中

是订阅的频道的数量。

接收到的信息(请参见下面的代码说明)。

PSUBSCRIBE

PSUBSCRIBE pattern [pattern …]

订阅符合给定模式的频道。

每个模式以 * 作为匹配符,比如 huangz 匹配所有以 huangz 开头的频道( huangzmsg 、 huangz-blog 、 huangz.tweets 等等), news. 匹配所有以 news. 开头的频道(news.it 、 news.global.today 等等),诸如此类。

O(N),

是订阅的模式的数量。

接收到的信息(请参见下面的代码说明)。

UNSUBSCRIBE

警告:此命令在新版 Redis 中似乎已经被废弃?

PUNSUBSCRIBE

警告:此命令在新版 Redis 中似乎已经被废弃?

WATCH

ATCH key [key …]

监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

O(1)。

总是返回

UNWATCH

UNWATCH

因为 EXEC 命令会执行事务,因此 WATCH 命令的效果已经产生了;而 DISCARD 命令在取消事务的同时也会取消所有对 key 的监视,因此这两个命令执行之后,就没有必要执行 UNWATCH 了。

O(1)

总是

MULTI

MULTI

标记一个事务块的开始。

O(1)。

总是返回

EXEC

EXEC

执行所有事务块内的命令。

假如某个(或某些) key 正处于 WATCH 命令的监视之下,且事务块中有和这个(或这些) key 相关的命令,那么 EXEC 命令只在这个(或这些) key 没有被其他命令所改动的情况下执行并生效,否则该事务被打断(abort)。

事务块内所有命令的时间复杂度的总和。

DISCARD

DISCARD

取消事务,放弃执行事务块内的所有命令。

O(1)。

总是返回

AUTH

AUTH password

通过设置配置文件中 requirepass 项的值(使用命令 CONFIG SET requirepass password ),可以使用密码来保护 Redis 服务器。

如果开启了密码保护的话,在每次连接 Redis 服务器之后,就要使用 AUTH 命令解锁,解锁之后才能使用其他 Redis 命令。

如果 AUTH 命令给定的密码 password 和配置文件中的密码相符的话,服务器会返回 OK 并开始接受命令输入。

反之,如果密码不匹配的话,服务器将返回一个错误,并要求客户端需重新输入密码。

O(1)

密码匹配时返回

,否则返回一个错误。

PING

PING

客户端向服务器发送一个 PING ,然后服务器返回客户端一个 PONG 。

通常用于测试与服务器的连接是否仍然生效,或者用于测量延迟值。

O(1)

SELECT

SELECT index

切换到指定的数据库,数据库索引号用数字值指定,以 0 作为起始索引值。

新的链接总是使用 0 号数据库。

O(1)

ECHO

ECHO message

打印一个特定的信息 message ,测试时使用。

O(1)

自身。

QUIT

QUIT

请求服务器关闭与当前客户端的连接。

一旦所有等待中的回复(如果有的话)顺利写入到客户端,连接就会被关闭。

O(1)

总是返回

(但是不会被打印显示,因为当时 Redis-cli 已经退出)。

BGREWRITEAOF

BGREWRITEAOF

异步(Asynchronously)重写 AOF 文件以反应当前数据库的状态。

O(N),

为要追加到 AOF 文件中的数据数量。

反馈信息。

BGSAVE

在后台异步保存当前数据库的数据到磁盘。

BGSAVE 命令执行之后立即返回 OK ,然后 Redis fork出一个新子进程,原来的 Redis 进程(父进程)继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出。

O(N),

为要保存到数据库中的 key 的数量。

反馈信息。

SAVE

SAVE

同步保存当前数据库的数据到磁盘。

O(N),

为要保存到数据库中的 key 的数量。

总是返回

LASTSAVE

LASTSAVE

O(1)

一个 UNIX 时间戳。

DBSIZE

DBSIZE

返回当前数据库的 key 的数量。

O(1)

当前数据库的 key 的数量。

SLAVEOF

SLAVEOF host port

通过执行 SLAVEOF host port 命令,可以将当前服务器转变为指定服务器的从属服务器(slave server)。

如果当前服务器已经是某个主服务器(master server)的从属服务器,那么执行 SLAVEOF host port 将使当前服务器停止对旧主服务器的同步,丢弃旧数据集,转而开始对新主服务器进行同步。

另外,对一个从属服务器执行命令 SLAVEOF NO ONE 将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集 _不会_被丢弃。

利用” SLAVEOF NO ONE 不会丢弃同步所得数据集”这个特性,可以在主服务器失败的时候,将从属服务器用作新的主服务器,从而实现无间断运行。

总是返回

FLUSHALL

FLUSHALL

清空整个 Redis 服务器的数据(删除 所有数据库的所有 key)。

此命令从不失败。

尚未明确

总是返回

FLUSHDB

FLUSHDB

清空 _当前_数据库中的所有 key 。

此命令从不失败。

O(1)

总是返回

SHUTDOWN

SHUTDOWN

假如只是单纯地执行 SAVE 命令,然后再执行 QUIT 命令,则没有这一保证 —— 因为在执行 SAVE 之后、执行 QUIT 之前的这段时间中间,其他客户端可能正在和服务器进行通讯,这时如果执行 QUIT 就会造成数据丢失。

不明确

SLOWLOG

SLOWLOG subcommand [argument]

什么是 SLOWLOG

Slow log 是 Redis 用来记录查询执行时间的日志系统。

查询执行时间指的是不包括像客户端响应(talking)、发送回复等 IO 操作,而单单是执行一个查询命令所耗费的时间。

另外,slow log 保存在内存里面,读写速度非常快,因此你可以放心地使用它,不必担心因为开启 slow log 而损害 Redis 的速度。

设置 SLOWLOG

Slow log 的行为由两个配置参数(configuration parameter)指定,可以通过改写 redis.conf 文件或者用 CONFIG GET 和 CONFIG SET 命令对它们动态地进行修改。

第一个选项是 slowlog-log-slower-then ,它决定要对执行时间大于多少微秒(microsecond,1秒 = 1,000,000 微秒)的查询进行记录。

比如执行以下命令将让 slow log 记录所有查询时间大于等于 100 微秒的查询:

CONFIG SET slowlog-log-slower-then 100 ,

而以下命令记录所有查询时间大于 1000 微秒的查询:

CONFIG SET slowlog-log-slower-then 1000 。

另一个选项是 slowlog-max-len ,它决定 slow log _最多_能保存多少条日志, slow log 本身是一个 LIFO 队列,当队列大小超过 slowlog-max-len 时,最旧的一条日志将被删除,而最新的一条日志加入到 slow log ,以此类推。

以下命令让 slow log 最多保存 1000 条日志:

CONFIG SET slowlog-max-len 1000 。

使用 CONFIG GET 命令可以查询两个选项的当前值:

查看 slow log

要查看 slow log ,可以使用 SLOWLOG GET 或者 SLOWLOG GET number 命令,前者打印所有 slow log ,最大长度取决于 slowlog-max-len 选项的值,而 SLOWLOG GET number 则只打印指定数量的日志。

最新的日志会最先被打印:

日志的唯一 id 只有在 Redis 服务器重启的时候才会重置,这样可以避免对日志的重复处理(比如你可能会想在每次发现新的慢查询时发邮件通知你)。

查看当前日志的数量

使用命令 SLOWLOG LEN 可以查看当前日志的数量。

请注意这个值和 slower-max-len 的区别,它们一个是当前日志的数量,一个是允许记录的最大日志的数量。

清空日志

使用命令 SLOWLOG RESET 可以清空 slow log 。

时间复杂度:O(1)

返回值:取决于不同命令,返回不同的值。

INFO

INFO

返回关于 Redis 服务器的各种信息和统计值。

O(1)

具体请参见下面的测试代码。

CONFIG GET

CONFIG GET parameter

CONFIG GET 命令用于取得运行中的 Redis 服务器的配置参数(configuration parameters),不过并非所有配置参数都被 CONFIG GET 命令所支持。

CONFIG GET 接受单个参数 parameter 作为搜索关键字,查找所有匹配的配置参数,其中参数和值以”键-值对”(key-value pairs)的方式排列。

比如执行 CONFIG GET s* 命令,服务器就会返回所有以 s 开头的配置参数及参数的值:

如果你只是寻找特定的某个参数的话,你当然也可以直接指定参数的名字:

使用命令 CONFIG GET * ,可以列出 CONFIG GET 命令支持的所有参数:

所有被 CONFIG SET 所支持的配置参数都可以在配置文件 redis.conf 中找到,不过 CONFIG GET 和 CONFIG SET 使用的格式和 redis.conf 文件所使用的格式有以下两点不同:

  • 10kb 、 2gb 这些在配置文件中所使用的储存单位缩写,不可以用在 CONFIG 命令中, CONFIG SET 的值只能通过数字值显式地设定。 像 CONFIG SET xxx 1k 这样的命令是错误的,正确的格式是 CONFIG SET xxx 1000 。
  • save 选项在 redis.conf 中是用多行文字储存的,但在 CONFIG GET 命令中,它只打印一行文字。 以下是 save 选项在 redis.conf 文件中的表示: save 900 1 save 300 10 save 60 10000 但是 CONFIG GET 命令的输出只有一行: redis> CONFIG GET save 1) “save” 2) “900 1 300 10 60 10000” 上面 save 参数的三个值表示:在 900 秒内最少有 1 个 key 被改动,或者 300 秒内最少有 10 个 key 被改动,又或者 60 秒内最少有 1000 个 key 被改动,以上三个条件随便满足一个,就触发一次保存操作。

不明确

给定配置参数的值。

CONFIG SET

CONFIG SET parameter value

你可以使用它修改配置参数,或者改变 Redis 的持久化(Persistence)方式。

不明确

当设置成功时返回

,否则返回一个错误。

CONFIG RESETSTAT

CONFIG RESETSTAT

  • Keyspace hits (键空间命中次数)
  • Keyspace misses (键空间不命中次数)
  • Number of commands processed (执行命令的次数)
  • Number of connections received (连接服务器的次数)
  • Number of expired keys (过期key的数量)

O(1)

总是返回

DEBUG OBJECT

DEBUG OBJECT key

返回给定 key 的调试信息。

O(1)

DEBUG SEGFAULT

DEBUG SEGFAULT

令 Redis 服务器崩溃,调试用。

不明确

MONITOR

MONITOR

实时打印出 Redis 服务器接收到的命令,调试用。

不明确

总是返回

SYNC

YNC

用于复制功能(replication)的内部命令。

不明确

不明确

(结束)

Original: https://www.cnblogs.com/buffer/p/3309211.html
Author: buffer的blogs
Title: phpredis中文手册——《redis中文手册》 php版

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/529438/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • BGP路由衰减

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年11月7日
    0164
  • 017 Linux 之啥是 ssh ?

    1 什么是 ssh?有什么用? (1)ssh 是一种协议 (2)ssh 服务 2 ssh 基于密匙的安全验证过程是怎样的? 3 对称加密与非对称加密区别是什么? (1)对称加密 (…

    Linux 2023年5月27日
    059
  • redis用法介绍

    Jedis常用方法API Redis命令用scan代替keys、smembers等命令 Java Spring 与 Redis 操作封装源码 Redis API 必杀解读:引入Re…

    Linux 2023年5月28日
    034
  • Linux PCI网卡驱动的详细分析

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年8月24日
    0256
  • NC反弹shell的几种方法

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年11月7日
    0179
  • CentOS单机安装k8s并部署.NET 6程序 压测 记录

    前面部分依照CentOS单机安装k8s并部署.NET 6程序来进行,内存、cpu、centos版本一致,之前222元买的三年8M 2c4g 腾讯云轻量服务器,这个教程算是写的很详细…

    Linux 2023年6月7日
    046
  • arch安装桌面环境

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年11月7日
    0178
  • Centos7 找回root密码

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年9月10日
    0195
  • 白话linux操作系统原理

    虽然计算机相关专业,操作系统和计算机组成原理是必修课。但是大学时和真正从事相关专业工作之后,对于知识的认知自然会发生变化。还很有可能,一辈子呆在学校的老师们只是照本宣科,自己的理解…

    Linux 2023年6月14日
    035
  • Redis集群架构

    Replication+Sentinel 这里Sentinel的作用有三个: 监控:Sentinel 会不断的检查主服务器和从服务器是否正常运行。 通知:当被监控的某个Redis服…

    Linux 2023年5月28日
    044
  • [转]全网最!详!细!tarjan算法讲解

    转发地址:https://blog.csdn.net/qq_34374664/article/details/77488976 原版的地址好像挂了….. 看到别人总结的…

    Linux 2023年6月7日
    038
  • 快速上手FastJSON

    作为一名后端开发而言肯定会接触数据,把数据提供给前端或者把数据存储起来,目前比较火热的传输格式是json,给前端传json是再常见不过啦,甚至是往db里面直接存入json。 在ja…

    Linux 2023年6月14日
    034
  • bzoj 1191 特别行动队

    一道不错的斜率优化入门题,传送门:bzoj 1911 题目描述稍微有点不太清楚,先解释一下 将n个士兵分成几个连续的组,每一组的战斗力为f(y),其中:f(x)=ax2+bx+c(…

    Linux 2023年6月6日
    051
  • Java刷题笔记—–>集合类

    一般提到某某集合区别,感觉必有线程安全Arrylist线程不安全,Vector反之 几个方面:线程是否安全,效率问题,对Null Key和Null value的支持,初始容量大小和…

    Linux 2023年6月7日
    047
  • EclipseC++学习笔记-2 WSL Linux环境搭建

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年8月24日
    0180
  • 面向对象设计的23种设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是…

    Linux 2023年6月7日
    043
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球