Redis常用命令
一、Key
DEL key [key …]
- 简介 删除指定的一批keys,如果删除中的某些key不存在,则直接忽略
- 返回值 被删除的keys的数量
- 实例:
127.0.0.1:6379> set key1 hello
OK
127.0.0.1:6379> set key2 hello
OK
127.0.0.1:6379> del key1 key2 key3
(integer) 2
DUMP key
- 简介 序列化给定 key ,并返回被序列化的值,使用 RESTORE命令可以将这个值反序列化为 Redis 键。序列化生成的值有以下几个特点:
1、 它带有 64 位的校验和,用于检测错误,RESTORE在进行反序列化之前会先检查校验和。
2、 值的编码格式和 RDB 文件保持一致。
3、 RDB 版本会被编码在序列化值当中,如果因为 Redis 的版本不同造成 RDB 格式不兼容,那么 Redis 会拒绝对这个值进行反序列化操作。序列化的值不包括任何生存时间信息。
- 返回值 如果 key 不存在,那么返回 nil。 否则,返回序列化之后的值。
- 实例
127.0.0.1:6379> dump key1
"\x00\x05hello\t\x00\xb3\x80\x8e\xba1\xb2C\xbb"
127.0.0.1:6379> dump key22
(nil)
EXISTS key [key…]
- 简介 返回key是否存在。
- 返回值 如果存在返回1;不存在返回0。
- 实例
127.0.0.1:6379> EXISTS key1
(integer) 1
127.0.0.1:6379> exists key22
(integer) 0
EXPIRE key seconds
- 简介 设置
key
的过期时间,超过时间后,将会自动删除该key
。 - 返回值 成功返回1;如果key不存在或者不能设置过期时间返回0。
- 实例
127.0.0.1:6379> expire key1 10000
(integer) 1
127.0.0.1:6379> expire key22 10000
(integer) 0
PEXPIRE key milliseconds
- 简介 这个命令和 EXPIRE命令的作用类似,但是它以毫秒为单位设置 key 的生存时间,而不像 EXPIRE命令那样,以秒为单位。
- 返回值 成功返回1;如果key不存在或者不能设置过期时间返回0。
- 实例
127.0.0.1:6379> PEXPIRE key1 1000000
(integer) 1
127.0.0.1:6379> EXPIRE key22 100000
(integer) 0
127.0.0.1:6379> ttl key1
(integer) 902 127.0.0.1:6379> pttl key1 (integer) 895275
EXPIREAT key timestamp
- 简介 在某个时间点过期。时间参数是 UNIX 时间戳 Unix timestamp 。
- 返回值 1 如果设置了过期时间 0 ;如果没有设置过期时间,或者不能设置过期时间。
- 实例
PEXPIREAT key milliseconds-timestamp
- 简介
PEXPIREAT
这个命令和 EXPIREAT命令类似,但它以毫秒为单位设置 key 的过期unix
时间戳,而不是像 EXPIREAT那样,以秒为单位。 - 返回值 成功返回1;如果key不存在或者不能设置过期时间返回0。
- 实例
KEYS pattern
- 简介 查找所有符合给定模式pattern(正则表达式)的 key 。
- 返回值 所有符合条件的key
- 实例
127.0.0.1:6379> keys *
1) "token"
2) "fa"
3) "online-token-eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImF1dGgiOiJhZG1pbiIsImp0aSI6IjEwYWQ3OGQ1OGFkZTQ3MzQ5MTY5NTZmNGZjZjRjZTE4In0.rOckMG5JM-WIgxMgxcVQXoI6IPH51CR0NTKA6HX1wA-Sqyv4IPdzA6MJQ8UA8bbtFci49FAiZqy1X4HNAlMpOQ"
MOVE key db
- 简介将当前数据库的 key 移动到给定的数据库 db 当中。
如果当前数据库(源数据库)和给定数据库(目标数据库)有相同名字的给定 key ,或者 key 不存在于当前数据库,那么 MOVE 没有任何效果。
因此,也可以利用这一特性,将
MOVE
当作锁(locking)原语(primitive)。 - 返回值 1 成功;0 失败。
- 实例
127.0.0.1:6379> get key1
"hello"
127.0.0.1:6379> move key1 1
(integer) 1
127.0.0.1:6379> get key1
(nil) 127.0.0.1:6379> select 1 OK 127.0.0.1:6379[1]> get key1 "hello" 127.0.0.1:6379[1]>
PERSIST key
- 简介 持久化key。
- 返回值 成功返回1;如果 key 不存在或 key 没有设置生存时间,返回 0。
- 实例
127.0.0.1:6379> set key1 hello
OK
127.0.0.1:6379> expire key1 1000
(integer) 1
127.0.0.1:6379> ttl key1
(integer) 997 127.0.0.1:6379> PERSIST key1 (integer) 1 127.0.0.1:6379> ttl key1 (integer) -1
TTL key
- 简介 返回key剩余的过期时间。 这种反射能力允许Redis客户端检查指定key在数据集里面剩余的有效期。
-
返回值
- key有效的秒数(TTL in seconds)
- 如果key存在并且没有设置过期时间(永久有效),返回
-1
。 - 如果key不存在或者已过期,返回
-2
。
- 实例
127.0.0.1:6379> EXPIRE key1 1000
(integer) 1
127.0.0.1:6379> ttl key1
(integer) 996
127.0.0.1:6379> PERSIST key1
(integer) 1 127.0.0.1:6379> ttl key1 (integer) -1 127.0.0.1:6379> del key1 (integer) 1 127.0.0.1:6379> ttl key1 (integer) -2
PTTL key
这个命令类似于TTL命令,但它以毫秒为单位返回 key 的剩余生存时间,而不是像TTL命令那样,以秒为单位。
TYPE key
- 简介 返回
key
所存储的value
的数据结构类型,它可以返回string
,list
,set
,zset
和hash
等不同的类型。 - 返回值 返回当前
key
的数据类型,如果key
不存在时返回none
。 - 实例
127.0.0.1:6379> type key1
none
127.0.0.1:6379>
128. set key1 hello
OK
127.0.0.1:6379> type key1 string
二、String
SET key value [EX seconds] [PX milliseconds] [NX|XX]
- 简介
将键
key
设定为指定的“字符串”值。如果 key 已经保存了一个值,那么这个操作会直接覆盖原来的值,并且忽略原始类型。
当
set
命令执行成功之后,之前设置的过期时间都将失效 - 选项
EX
seconds – Set the specified expire time, in seconds.PX
milliseconds – Set the specified expire time, in milliseconds.NX
– Only set the key if it does not already exist.XX
– Only set the key if it already exist.EX
seconds – 设置键key的过期时间,单位时秒PX
milliseconds – 设置键key的过期时间,单位时毫秒NX
– 只有键key不存在的时候才会设置key的值XX
– 只有键key存在的时候才会设置key的值- 返回值
如果SET
命令正常执行那么回返回OK
,否则如果加了NX
或者 XX
选项,但是没有设置条件。那么会返回nil。
- 实例
127.0.0.1:6379> set key1 hello
OK
MSET key value [key value …]
- 简介
对应给定的keys到他们相应的values上。MSET
会用新的value替换已经存在的value,就像普通的SET命令一样。如果你不想覆盖已经存在的values,请参看命令MSETNX。
MSET
是原子的,所以所有给定的keys是一次性set的。客户端不可能看到这种一部分keys被更新而另外的没有改变的情况。
- 返回值
总是OK,因为MSET不会失败。
- 实例
127.0.0.1:6379> mset key1 hello key2 world key3 name
OK
127.0.0.1:6379> get key2
"world"
SETEX key seconds value
- 简介
设置key对应字符串value,并且设置key在给定的seconds时间之后超时过期。这个命令等效于执行下面的命令:
SET mykey value
EXPIRE mykey seconds
- 返回值
- 实例
127.0.0.1:6379> setex key4 100 hello
OK
127.0.0.1:6379> ttl key4
(integer) 97
127.0.0.1:6379>
SETNX key value
- 简介
将key
设置值为value
,如果key
不存在,这种情况下等同SET命令。 当key
存在时,什么也不做。SETNX
是”SET if Not eXists”的简写。
- 返回值
1、 1
如果key被设置了
2、 0
如果key没有被设置
- 实例
127.0.0.1:6379> exists key1
(integer) 1
127.0.0.1:6379> setnx key1 hello
(integer) 0
GET key
- 简介
返回key
的value
。如果key不存在,返回特殊值nil
。如果key
的value
不是string,就返回错误,因为GET
只处理string类型的values
。
- 返回值
返回key
的value
。如果key不存在,返回特殊值nil
。如果key
的value
不是string,就返回错误,因为GET
只处理string类型的values
。
- 实例
127.0.0.1:6379> get key1
"hello"
127.0.0.1:6379>
MGET key [key …]
- 简介
返回所有指定的key的value。对于每个不对应string或者不存在的key,都返回特殊值nil
。正因为此,这个操作从来不会失败。
- 返回值
返回所有指定的key的value。对于每个不对应string或者不存在的key,都返回特殊值nil
。正因为此,这个操作从来不会失败。
- 实例
127.0.0.1:6379> mget key1 key2 key3
1) "hello"
2) "world"
3) "name"
INCR key
- 简介
对存储在指定key
的数值执行原子的加1操作。
如果指定的key不存在,那么在执行incr操作之前,会先将它的值设定为0
。
如果指定的key中存储的值不是字符串类型(fix:)或者存储的字符串类型不能表示为一个整数,
那么执行这个命令时服务器会返回一个错误(eq:(error) ERR value is not an integer or out of range)。
这个操作仅限于64位的有符号整型数据。
注意: 由于redis并没有一个明确的类型来表示整型数据,所以这个操作是一个字符串操作。
执行这个操作的时候,key对应存储的字符串被解析为10进制的64位有符号整型数据。
事实上,Redis 内部采用整数形式(Integer representation)来存储对应的整数值,所以对该类字符串值实际上是用整数保存,也就不存在存储整数的字符串表示(String representation)所带来的额外消耗。
- 返回值
执行递增操作后key
对应的值。
- 实例
127.0.0.1:6379> set numKey 10
OK
127.0.0.1:6379> incr numKey
(integer) 11
127.0.0.1:6379> get numKey
"11"
INCRBY key increment
- 简介
将key对应的数字加decrement。如果key不存在,操作之前,key就会被置为0。如果key的value类型错误或者是个不能表示成数字的字符串,就返回错误。这个操作最多支持64位有符号的正型数字。
- 返回值
将key对应的数字加decrement。如果key不存在,操作之前,key就会被置为0。如果key的value类型错误或者是个不能表示成数字的字符串,就返回错误。这个操作最多支持64位有符号的正型数字。
- 实例
127.0.0.1:6379> get numKey
"11"
127.0.0.1:6379> incrby numKey 100
(integer) 111
127.0.0.1:6379> get numKey
"111"
DECR key
- 简介
对key对应的数字做减1操作。如果key不存在,那么在操作之前,这个key对应的值会被置为0。如果key有一个错误类型的value或者是一个不能表示成数字的字符串,就返回错误。这个操作最大支持在64位有符号的整型数字。
- 返回值
对key对应的数字做减1操作。如果key不存在,那么在操作之前,这个key对应的值会被置为0。如果key有一个错误类型的value或者是一个不能表示成数字的字符串,就返回错误。这个操作最大支持在64位有符号的整型数字。
- 实例
127.0.0.1:6379> decr numKey
(integer) 110
DECRBY key decrement
- 简介
将key对应的数字减decrement。如果key不存在,操作之前,key就会被置为0。如果key的value类型错误或者是个不能表示成数字的字符串,就返回错误。这个操作最多支持64位有符号的正型数字。
- 返回值
返回一个数字:减少之后的value值。
- 实例
127.0.0.1:6379> decrby numKey 10
(integer) 100
STRLEN key
- 简介
返回key的string类型value的长度。如果key对应的非string类型,就返回错误。
- 返回值
返回key的string类型value的长度。如果key对应的非string类型,就返回错误。
- 实例
127.0.0.1:6379> set str hello
OK
127.0.0.1:6379> strlen str
(integer) 5
三、List
RPUSH key value [value …]
- 简介
向存于 key 的列表的尾部插入所有指定的值。如果 key 不存在,那么会创建一个空的列表然后再进行 push 操作。 当 key 保存的不是一个列表,那么会返回一个错误。
可以使用一个命令把多个元素打入队列,只需要在命令后面指定多个参数。元素是从左到右一个接一个从列表尾部插入。 比如命令 RPUSH mylist a b c 会返回一个列表,其第一个元素是 a ,第二个元素是 b ,第三个元素是 c。
- 返回值
在 push 操作后的列表长度。
- 实例
127.0.0.1:6379> rpush key a b c d
(integer) 4
LPUSH key value [value …]
- 简介
将所有指定的值插入到存于 key 的列表的头部。如果 key 不存在,那么在进行 push 操作前会创建一个空列表。 如果 key 对应的值不是一个 list 的话,那么会返回一个错误。
可以使用一个命令把多个元素 push 进入列表,只需在命令末尾加上多个指定的参数。元素是从最左端的到最右端的、一个接一个被插入到 list 的头部。 所以对于这个命令例子 LPUSH mylist a b c
,返回的列表是 c 为第一个元素, b 为第二个元素, a 为第三个元素。
- 返回值
在 push 操作后的 list 长度。
- 实例
127.0.0.1:6379> lpush mylist a b c
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "c"
2) "b"
3) "a"
RPUSHX key value
- 简介
将值 value 插入到列表 key 的表尾, 当且仅当 key 存在并且是一个列表。 和 RPUSH 命令相反, 当 key 不存在时,RPUSHX 命令什么也不做。
- 返回值
将值 value 插入到列表 key 的表尾, 当且仅当 key 存在并且是一个列表。 和 RPUSH 命令相反, 当 key 不存在时,RPUSHX 命令什么也不做。
- 实例
127.0.0.1:6379> rpushx list a b
(integer) 0
127.0.0.1:6379> exists list
(integer) 0
LPUSHX key value
- 简介
只有当 key 已经存在并且存着一个 list 的时候,在这个 key 下面的 list 的头部插入 value。 与 LPUSH 相反,当 key 不存在的时候不会进行任何操作。
- 返回值
在 push 操作后的 list 长度。
- 实例
127.0.0.1:6379> lpushx list a b c
(integer) 0
127.0.0.1:6379> exists list
(integer) 0
127.0.0.1:6379>
LRANGE key start stop
- 简介
返回存储在 key 的列表里指定范围内的元素。 start 和 end 偏移量都是基于0的下标,即list的第一个元素下标是0(list的表头),第二个元素下标是1,以此类推。
偏移量也可以是负数,表示偏移量是从list尾部开始计数。 例如, -1 表示列表的最后一个元素,-2 是倒数第二个,以此类推。
超过范围的下标:
当下标超过list范围的时候不会产生error。 如果start比list的尾部下标大的时候,会返回一个空列表。 如果stop比list的实际尾部大的时候,Redis会当它是最后一个元素的下标。
- 返回值
指定范围里的列表元素。
- 实例
127.0.0.1:6379> rpush list a b c
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "a"
2) "b"
3) "c"
RPOP key
- 简介
移除并返回存于 key 的 list 的最后一个元素。
- 返回值
最后一个元素的值,或者当 key 不存在的时候返回 nil。
- 实例
127.0.0.1:6379> lrange list 0 -1
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> rpop list
"c" 127.0.0.1:6379> lrange list 0 -1 1) "a" 2) "b"
LPOP key
- 简介
移除并且返回 key 对应的 list 的第一个元素。
- 返回值
返回第一个元素的值,或者当 key 不存在时返回 nil。
- 实例
127.0.0.1:6379> lpop list
"a"
127.0.0.1:6379> lrange list 0 -1
1) "b"
BRPOP key [key …] timeout
- 简介
BRPOP
是一个阻塞的列表弹出原语。 它是 RPOP 的阻塞版本,因为这个命令会在给定list无法弹出任何元素的时候阻塞连接。 该命令会按照给出的 key 顺序查看 list,并在找到的第一个非空 list 的尾部弹出一个元素。
- 返回值
1、 当没有元素可以被弹出时返回一个 nil
的多批量值,并且 timeout 过期。
2、 当有元素弹出时会返回一个双元素的多批量值,其中第一个元素是弹出元素的 key
,第二个元素是 value
。
- 实例
127.0.0.1:6379> blpop list 1
1) "list"
2) "b"
BLPOP key [key …] timeout
- 简介
- 返回值
- 实例
LLEN key
- 简介
返回存储在 key 里的list的长度。 如果 key 不存在,那么就被看作是空list,并且返回长度为 0。 当存储在 key 里的值不是一个list的话,会返回error。
- 返回值
返回存储在 key 里的list的长度。 如果 key 不存在,那么就被看作是空list,并且返回长度为 0。 当存储在 key 里的值不是一个list的话,会返回error。
- 实例
127.0.0.1:6379> rpush list a b c
(integer) 3
127.0.0.1:6379> llen list
(integer) 3
LREM key count value
- 简介
从存于 key 的列表里移除前 count 次出现的值为 value 的元素。 这个 count 参数通过下面几种方式影响这个操作:
- count > 0: 从头往尾移除值为 value 的元素。
- count < 0: 从尾往头移除值为 value 的元素。
- count = 0: 移除所有值为 value 的元素。
比如, LREM list -2 “hello” 会从存于 list 的列表里移除最后两个出现的 “hello”。
需要注意的是,如果list里没有存在key就会被当作空list处理,所以当 key 不存在的时候,这个命令会返回 0。
- 返回值
被移除的元素个数。
- 实例
127.0.0.1:6379> lrem list 0 b
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "a"
2) "c"
LSET key index value
- 简介
设置 index 位置的list元素的值为 value。
- 返回值
- 实例
127.0.0.1:6379> lset list 1 world
OK
127.0.0.1:6379> lrange list 0 -1
1) "a"
2) "world"
LINDEX key index
- 简介
返回列表里的元素的索引 index 存储在 key 里面。 下标是从0开始索引的,所以 0 是表示第一个元素, 1 表示第二个元素,并以此类推。 负数索引用于指定从列表尾部开始索引的元素。在这种方法下,-1 表示最后一个元素,-2 表示倒数第二个元素,并以此往前推。
当 key 位置的值不是一个列表的时候,会返回一个error。
- 返回值
请求的对应元素,或者当 index 超过范围的时候返回 nil。
- 实例
127.0.0.1:6379> lindex list 0
"a"
127.0.0.1:6379> lindex list 1
"world"
四、Hash
HSET key field value
- 简介
设置 key 指定的哈希集中指定字段的值。
如果 key 指定的哈希集不存在,会创建一个新的哈希集并与 key 关联。
如果字段在哈希集中存在,它将被重写。
- 返回值
1、 1如果field是一个新的字段
2、 0如果field原来在map里面已经存在
- 实例
127.0.0.1:6379> hset hash name hello
(integer) 1
HMSET key field value [field value …]
- 简介
设置 key
指定的哈希集中指定字段的值。该命令将重写所有在哈希集中存在的字段。如果 key
指定的哈希集不存在,会创建一个新的哈希集并与 key
关联
- 返回值
- 实例
127.0.0.1:6379> hset hash age 12 mobile 12345678
(integer) 2
HSETNX key field value
- 简介
只在 key
指定的哈希集中不存在指定的字段时,设置字段的值。如果 key
指定的哈希集不存在,会创建一个新的哈希集并与 key
关联。如果字段已存在,该操作无效果。
- 返回值
- 1:如果字段是个新的字段,并成功赋值
- 0:如果哈希集中已存在该字段,没有操作被执行
- 实例
127.0.0.1:6379> hsetnx hash name newName
(integer) 0
127.0.0.1:6379> hsetnx hash email hello@qq.com
(integer) 1
HGET key field
- 简介
返回 key 指定的哈希集中该字段所关联的值
- 返回值
该字段所关联的值。当字段不存在或者 key 不存在时返回nil。
- 实例
127.0.0.1:6379> hget hash name
"hello"
HMGET key field [field …]
- 简介
返回 key
指定的哈希集中指定字段的值。
对于哈希集中不存在的每个字段,返回 nil
值。因为不存在的keys被认为是一个空的哈希集,对一个不存在的 key
执行 HMGET 将返回一个只含有 nil
值的列表
- 返回值
含有给定字段及其值的列表,并保持与请求相同的顺序。
- 实例
127.0.0.1:6379> hmget hash name email age
1) "hello"
2) "hello@qq.com"
3) "12"
HLEN key
- 简介
返回 key
指定的哈希集包含的字段的数量。
- 返回值
返回 key
指定的哈希集包含的字段的数量。
- 实例
127.0.0.1:6379> hlen hash
(integer) 4
HKEYS key
- 简介
返回 key 指定的哈希集中所有字段的名字。
- 返回值
返回 key 指定的哈希集中所有字段的名字。
- 实例
127.0.0.1:6379> hkeys hash
1) "name"
2) "age"
3) "mobile"
4) "email"
HVALS key
- 简介
返回 key 指定的哈希集中所有字段的值。
- 返回值
哈希集中的值的列表,当 key 指定的哈希集不存在时返回空列表。
- 实例
127.0.0.1:6379> hvals hash
1) "hello"
2) "12"
3) "12345678"
4) "hello@qq.com"
HGETALL key
- 简介
返回 key 指定的哈希集中所有的字段和值。返回值中,每个字段名的下一个是它的值,所以返回值的长度是哈希集大小的两倍
- 返回值
哈希集中字段和值的列表。当 key 指定的哈希集不存在时返回空列表。
- 实例
127.0.0.1:6379> hgetall hash
1) "name"
2) "hello"
3) "age"
4) "12"
5) "mobile" 6) "12345678" 7) "email" 8) "hello@qq.com" 127.0.0.1:6379>
HEXISTS key field
- 简介
返回hash里面field是否存在
- 返回值
- 1 hash里面包含该field。
- 0 hash里面不包含该field或者key不存在。
- 实例
127.0.0.1:6379> hexists hash name
(integer) 1
127.0.0.1:6379> hexists hash key
(integer) 0
127.0.0.1:6379>
HDEL key field [field …]
- 简介
从 key 指定的哈希集中移除指定的域。在哈希集中不存在的域将被忽略。
如果 key 指定的哈希集不存在,它将被认为是一个空的哈希集,该命令将返回0。
- 返回值
返回从哈希集中成功移除的域的数量,不包括指出但不存在的那些域
- 实例
127.0.0.1:6379> hkeys hash
1) "name"
2) "age"
3) "mobile"
4) "email"
127.0.0.1:6379> hdel hash name age (integer) 2 127.0.0.1:6379> hkeys hash 1) "mobile" 2) "email" 127.0.0.1:6379>
五、SortedSet
ZADD key [NX|XX] [CH] [INCR] score member [score member …]
- 简介
将所有指定成员添加到键为key
有序集合(sorted set)里面。 添加时可以指定多个分数/成员(score/member)对。 如果指定添加的成员已经是有序集合里面的成员,则会更新改成员的分数(scrore)并更新到正确的排序位置。
如果key
不存在,将会创建一个新的有序集合(sorted set)并将分数/成员(score/member)对添加到有序集合,就像原来存在一个空的有序集合一样。如果key
存在,但是类型不是有序集合,将会返回一个错误应答。
分数值是一个双精度的浮点型数字字符串。+inf
和-inf
都是有效值。
ZADD 参数(options) (>= Redis 3.0.2)
ZADD 命令在key
后面分数/成员(score/member)对前面支持一些参数,他们是:
- XX: 仅仅更新存在的成员,不添加新成员。
- NX: 不更新存在的成员。只添加新成员。
- CH: 修改返回值为发生变化的成员总数,原始是返回新添加成员的总数 (CH 是 changed 的意思)。更改的元素是 新添加的成员,已经存在的成员 更新分数。 所以在命令中指定的成员有相同的分数将不被计算在内。注:在通常情况下,
ZADD
返回值只计算新添加成员的数量。 - INCR: 当
ZADD
指定这个选项时,成员的操作就等同 ZINCRBY命令,对成员的分数进行递增操作。
分数可以精确的表示的整数的范围
Redis 有序集合的分数使用双精度64位浮点数。我们支持所有的架构,这表示为一个IEEE 754 floating point number,它能包括的整数范围是-(2^53)
到 +(2^53)
。或者说是-9007199254740992 到 9007199254740992。更大的整数在内部用指数形式表示,所以,如果为分数设置一个非常大的整数,你得到的是一个近似的十进制数。
Sorted sets 101
有序集合按照分数以递增的方式进行排序。相同的成员(member)只存在一次,有序集合不允许存在重复的成员。 分数可以通过ZADD
命令进行更新或者也可以通过ZINCRBY
命令递增来修改之前的值,相应的他们的排序位置也会随着分数变化而改变。
获取一个成员当前的分数可以使用ZSCORE命令,也可以用它来验证成员是否存在。
相同分数的成员
有序集合里面的成员是不能重复的都是唯一的,但是,不同成员间有可能有相同的分数。当多个成员有相同的分数时,他们将是有序的字典(ordered lexicographically)(仍由分数作为第一排序条件,然后,相同分数的成员按照字典规则相对排序)。
字典顺序排序用的是二进制,它比较的是字符串的字节数组。
如果用户将所有元素设置相同分数(例如0),有序集合里面的所有元素将按照字典顺序进行排序,范围查询元素可以使用ZRANGEBYLEX命令(注:范围查询分数可以使用ZRANGEBYSCORE命令)。
- 返回值
- 添加到有序集合的成员数量,不包括已经存在更新分数的成员。
- 如果指定
INCR
参数, 返回将会变成:成员的新分数(双精度的浮点型数字)字符串。
- 实例
127.0.0.1:6379> zadd key2 10 a 20 b 30 c 40 d
(integer) 4
127.0.0.1:6379> zrange key2 0 -1
1) "a"
2) "b"
3) "c" 4) "d" 127.0.0.1:6379> zrange key2 0 -1 withscores 1) "a" 2) "10" 3) "b" 4) "20" 5) "c" 6) "30" 7) "d" 8) "40" 127.0.0.1:6379>
ZCARD key
- 简介
返回key的有序集元素个数。
- 返回值
返回key的有序集元素个数。
- 实例
127.0.0.1:6379> zcard key2
(integer) 4
ZCOUNT key min max
- 简介
返回有序集key中,score值在min和max之间(默认包括score值等于min或max)的成员。
- 返回值
指定分数范围的元素个数。
- 实例
127.0.0.1:6379> zcount key2 30 50
(integer) 2
127.0.0.1:6379>
ZPOPMAX key [count]
- 简介
删除并返回有序集合key
中的最多count
个具有最高得分的成员。
如未指定,count
的默认值为1。指定一个大于有序集合的基数的count
不会产生错误。 当返回多个元素时候,得分最高的元素将是第一个元素,然后是分数较低的元素。
- 返回值
弹出的元素和分数列表。
- 实例
127.0.0.1:6379> zpopmax key2 1
1) "d"
2) "40"
127.0.0.1:6379> zrange key2 0 -1
1) "a"
2) "b" 3) "c" 127.0.0.1:6379>
ZPOPMIN key [count]
- 简介
删除并返回有序集合key
中的最多count
个具有最低得分的成员。
如未指定,count
的默认值为1。指定一个大于有序集合的基数的count
不会产生错误。 当返回多个元素时候,得分最低的元素将是第一个元素,然后是分数较高的元素。
- 返回值
弹出的元素和分数列表.
- 实例
127.0.0.1:6379> zpopmin key2 1
1) "a"
2) "10"
ZRANGE key start stop [WITHSCORES]
- 简介
返回存储在有序集合key
中的指定范围的元素。 返回的元素可以认为是按得分从最低到最高排列。 如果得分相同,将按字典排序。
当你需要元素从最高分到最低分排列时,请参阅ZREVRANGE
(相同的得分将使用字典倒序排序)。
参数start
和stop
都是基于零的索引,即0
是第一个元素,1
是第二个元素,以此类推。 它们也可以是负数,表示从有序集合的末尾的偏移量,其中-1
是有序集合的最后一个元素,-2
是倒数第二个元素,等等。
start
和stop
都是全包含的区间,因此例如ZRANGE myzset 0 1
将会返回有序集合的第一个和第二个元素。
超出范围的索引不会产生错误。 如果start
参数的值大于有序集合中的最大索引,或者start > stop
,将会返回一个空列表。 如果stop
的值大于有序集合的末尾,Redis会将其视为有序集合的最后一个元素。
可以传递WITHSCORES
选项,以便将元素的分数与元素一起返回。这样,返回的列表将包含value1,score1,...,valueN,scoreN
,而不是value1,...,valueN
。 客户端类库可以自由地返回更合适的数据类型(建议:具有值和得分的数组或记录)
- 返回值
给定下标范围内的元素列表(如果指定了WITHSCORES
选项,将同时返回它们的得分)。
- 实例
127.0.0.1:6379> zrange key2 0 -1
1) "b"
2) "c"
127.0.0.1:6379> zrange key2 0 -1 withscores
1) "b"
2) "20" 3) "c" 4) "30" 127.0.0.1:6379>
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
- 简介
如果M是常量(比如,用limit总是请求前10个元素),你可以认为是O(log(N))。
返回key的有序集合中的分数在min和max之间的所有元素(包括分数等于max或者min的元素)。元素被认为是从低分到高分排序的。
具有相同分数的元素按字典序排列(这个根据redis对有序集合实现的情况而定,并不需要进一步计算)。
可选的LIMIT参数指定返回结果的数量及区间(类似SQL中SELECT LIMIT offset, count)。注意,如果offset太大,定位offset就可能遍历整个有序集合,这会增加O(N)的复杂度。
可选参数WITHSCORES会返回元素和其分数,而不只是元素。这个选项在redis2.0之后的版本都可用。
区间及无限
min和max可以是-inf和+inf,这样一来,你就可以在不知道有序集的最低和最高score值的情况下,使用ZRANGEBYSCORE这类命令。
默认情况下,区间的取值使用闭区间(小于等于或大于等于),你也可以通过给参数前增加(符号来使用可选的开区间(小于或大于)。
- 返回值
指定分数范围的元素列表(也可以返回他们的分数)。
- 实例
127.0.0.1:6379> zrange key2 0 -1 withscores
1) "m"
2) "10"
3) "b"
4) "20"
5) "d" 6) "22" 7) "c" 8) "30" 9) "x" 10) "33" 11) "y" 12) "45" 13) "n" 14) "87" 127.0.0.1:6379> zrangebyscore key2 30 50 withscores 1) "c" 2) "30" 3) "x" 4) "33" 5) "y" 6) "45" 127.0.0.1:6379>
ZSCORE key member
- 简介
返回有序集key中,成员member的score值。
如果member元素不是有序集key的成员,或key不存在,返回nil。
- 返回值
member成员的score值(double型浮点数),以字符串形式表示。
- 实例
127.0.0.1:6379> zscore key2 b
"20"
127.0.0.1:6379>
ZREM key member [member …]
- 简介
当key存在,但是其不是有序集合类型,就返回一个错误
- 返回值
返回的是从有序集合中删除的成员个数,不包括不存在的成员。
- 实例
127.0.0.1:6379> zrem key2 b
(integer) 1
127.0.0.1:6379> zrange key2 0 -1
1) "m"
2) "d"
3) "c" 4) "x" 5) "y" 6) "n" 127.0.0.1:6379>
本文使用 tech.souyunku.com 排版