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)

大家都在看

  • NRF24L01双向无线通信

    最近闲来无事,利用手头资源研究了一下基于nrf24L01的双向通信实验,整个系统如下图所示。原理:nrf24L01本身是一种单向通信的无线模块,但是,当nrf24L01工作在增强型…

    Linux 2023年6月14日
    094
  • Redis Sentinel实现的机制与原理详解

    Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案。实际上这意味着你可以使用Sentinel模式创建一个可以不用人为干预而应对各种故障的Redis部署。 它…

    Linux 2023年5月28日
    0118
  • [云原生]Kubernetes-集群搭建(第2章)

    一、前置知识点 二、kubeadm部署方式介绍 三、安装要求 四、最终目标 五、准备环境 六、环境初始化 6.1 设置系统主机名以及Hosts文件的相互解析 6.2 安装依赖文件(…

    Linux 2023年6月13日
    078
  • Python函数的必选参数、默认参数、可变参数、关键字参数和命名关键字参数

    必选参数 def function(args_name): print (args_name) function("参数调用") ~$ 参数调用 跟在函数名口号…

    Linux 2023年6月7日
    073
  • 用go把博客园博客下载到本地Hexo目录下

    找到cookie 直接浏览器F12 巴拉巴拉 直接上代码 用hexo建静态博客的话,go文件在 \source\_posts目录下,run之后将会在此目录下生成cnblogs文件夹…

    Linux 2023年6月7日
    095
  • 搭建ES集群

    添加以下elasticsearch用户: bash;gutter:true; 1 useradd elasticsearch 2 passwd elasticsearch</…

    Linux 2023年6月8日
    086
  • 【MQTT】阿里云搭建MQTT物联网平台通信

    MQTT环境搭建和测试 物联网环境搭建 MQTT.fx使用 物联网环境搭建 1.首先进入阿里云官网注册并登录你的账号。2.点击控制台。3.在产品与服务下面搜索物联网平台4.点击公共…

    Linux 2023年6月13日
    085
  • npm常用命令

    npm install npm install=npm i。在git clone项目的时候,项目文件中并没有 node_modules文件夹,项目的依赖文件可能很大。直接执行,np…

    Linux 2023年6月13日
    0105
  • 每天一个 HTTP 状态码 202

    202 Accepted 表示服务器已经接受了这个请求,但是还不确定… 202 Accepted 202 Accepted 表示服务器已经接受了这个请求,但是还不确定这…

    Linux 2023年6月7日
    0108
  • 20 年老程序员告诉你的 20 条编码原则

    我从 1999 年就开始了编程生涯,到今年已经有 20 多年了。我先是从 Basic 开始,很快转到了 Pascal 和 C 语言,然后又学习了面向对象编程语言 Delphi 和 …

    Linux 2023年6月8日
    099
  • 海思3559 FFMPEG移植

    具体参考下面这篇帖子http://bbs.ebaina.com/forum.php?mod=viewthread&tid=79863&pid=156755&…

    Linux 2023年6月13日
    096
  • linux学习相关资料整理

    Posted on2022-09-08 13:09 brad1208 阅读(20 ) 评论() 编辑 linux常用指令记录 Python3.9.9安装 supervisor安装与…

    Linux 2023年6月6日
    096
  • ASP.NET MVC实现POST方式的Redirect

    我们知道,在ASP.NET MVC中,要从一个Action跳转到另一个Action,通常是用一系列以”Redirect”开头的方法 Redirect Red…

    Linux 2023年6月13日
    0100
  • 同一台电脑生成多份ssh私钥和公钥,映射多个GitHub账号

    当我们使用 Git 进行代码版本控制时,经常出现一台电脑需要连接多个Git 账号的情况,此时需要在一台电脑上生成多份 ssh 私钥和密钥,同时映射多个 Git 账号;这里我们需要同…

    Linux 2023年6月14日
    081
  • 进程与fork

    进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程…

    Linux 2023年6月7日
    0101
  • JQ 实现对比两个文本的差异并高亮显示差异部分

    利用jq对比两段文本的差异,差异的内容用不同颜色表示出来。 在线参考demo:http://incaseofstairs.com/jsdiff/ 项目地址:https://gith…

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