专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

Redis常用命令

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在数据集里面剩余的有效期。
  • 返回值

    1. key有效的秒数(TTL in seconds)
    2. 如果key存在并且没有设置过期时间(永久有效),返回 -1
    3. 如果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, zsethash等不同的类型。
  • 返回值 返回当前 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

  • 简介

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

  • 返回值

返回keyvalue。如果key不存在,返回特殊值nil。如果keyvalue不是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(相同的得分将使用字典倒序排序)。

参数startstop都是基于零的索引,即0是第一个元素,1是第二个元素,以此类推。 它们也可以是负数,表示从有序集合的末尾的偏移量,其中-1是有序集合的最后一个元素,-2是倒数第二个元素,等等。

startstop都是全包含的区间,因此例如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 排版

文章永久链接:https://tech.souyunku.com/37439

未经允许不得转载:搜云库技术团队 » Redis常用命令

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们