Redis 常用命令

Redis 常用命令

1. 通用命令

#命令说明
1keys查看所有的 key
2dbsize统计键值对的数量
3exists判断指定键值对是否存在
4del删除指定键值对
5expire设置过期自动删除
6type查看键值对数据模型类型

2. 字符串命令

Redis 中的键(key)都是字符串,但是值可以有多种类型( 常见五种 )。

字符串类型的值(Value)最大不能超过 512M( 已经足够大了 )。

一般情况下,考虑到并发、流量等问题,通常字符串类型的值最大也只是『百K』级别。

主要命令:

命令语法
getget <key>
setset <key> <value>
deldel <key>

set 命令

set 命令用于新增或更新键值对。具体是新增还是更新,取决于该键值对原本是否存在。

语法:

SET <key> <value>

SET 执行成功时返回 OK 。

# 对不存在的键进行设置
> SET key "value"
OK
   
> GET key
"value"

# 对已存在的键进行设置

> SET key "new-value"
OK
   
> GET key
"new-value"
  • set 一个『不存在』的 key ,就是『新增』一个键值对;

  • set 一个『已存在』的 key ,就是『更新』这个键值对。

带参数的 set 命令

  • 无论 key 是否存在,都进行设置

    > set <key> <val>
  • key 不存在,才设置;等同于 setnx <key> <val>

    > set <key> <val> NX

    这是真正意义上的『新增』操作,因为要求之前是必须没有的。

  • key 存在,才设置。

    > set <key> <val> XX

    1

    这是真正意义上的『更新』操作,因为要求之前是必须有的。

get

Get 命令用于获取某个键值对的值(String),具体是哪个键值对由参数 key 决定。

如果键值对不存在,则返回 nil

如果键值对的值部分并非字符串(String)类型,则返回一个错误。简而言之,redis 在告诉你 get 命令用错地方了。

语法:

get <key>
# 对不存在的 *key* 或字符串类型 *key* 进行 Get
> GET db
(nil)
   
> SET db redis
OK
   
> GET db
"redis"

# 对不是字符串类型的 *key* 进行 GET
> DEL db
(integer) 1
   
# 在 redis 中添加一个 list 类型的键值对
> LPUSH db redis mongodb mysql
(integer) 3
   
> GET db
(error) ERR Operation against a key holding the wrong kind of value

del 命令

del 命令用于删除某个键值对。

如果 key 代表的键值对不存在,则该操作无任何效果。

实际上 del 命令是一个通用命令,各种类型结构都有这个命令。

语法:

del <key>

del 命令将返回被删除的键值对的数量。

> SET w3ckey redis
OK

# 删除已创建的 *key* 。
> DEL w3ckey
(integer) 1

3. 哈希命令

在 Hash 结构中,键值对的值又分为两个部分:fieldvalue 。例如:

Hash 类型的价值在于,在 Redis 中存储了一个对象的信息后,可以单独更新该对象的某个属性的值,而不需要:取出-更新-序列化-存入 。

注意,与数据库中的列不同,Hash 结构中不强求两个键值对中必须有同样数量/名称的 field 。

hset 命令

hset 命令用于向某个 HashTable 中添加新的键值对 field - value。至于是哪个哈希表则取决与参数 key

注意,这里有两层键值对。

  • 首先,整个 Redis 中的数据内容就是一对一对键值对( key - hashtable ),其中,每个键值对的值部分都是一个 HashTable(HashTable 是 HashMap 的「高级」版本)

  • 其次,HashTable 中存放的又是一对一对的键值对( filed - value )。

如果 哈希表 不存在,这个哈希表会被创建,并添加至 Redis 中,然后再进行 Hset 操作。

如果 将要添加进哈希表中的 键值对 已经存在,则该 键值对 的旧值将被覆盖。

语法:

hset key field value

1

如果 field-value 是哈希表中的一个新建键值对,并且值设置成功,返回 1 。

如果在哈希表中 field - value 字段已经存在,则旧值被新值覆盖,返回 0 。

> HSET myhash field1 "foo"
OK
> HGET myhash field1
"foo"

# 设置一个新域  
> HSET website google "www.g.cn"      
(integer) 1

# 覆盖一个旧域  
>HSET website google "www.google.com"
(integer) 0

hsetnx 命令

Hsetnx 命令用于向某个哈希表中添加新的 field - value ,具体是哪个 HashTable 取决于参数 key

这里要求 filed - value 原本不存在于该 HashTable 中 。

如果 filed - value 不存在,则这个 filed - value 将被添加到 HashTable 中。

如果 filed - value 已经存在于哈希表中,操作无效。

如果 HashTable 不存在,一个新哈希表将被创建,并执行 HSETNX 命令。

语法:

hsetnx <key> <field> <value>

hsetnx 命令设置成功时,返回 1 。如果给定 filed - value 已经存在,则没有操作被执行,返回 0 。

# key 或 field 不存在时,才进行设值操作。
> HSETNX myhash field1 "foo"
(integer) 1 # 不存在,操作成功

> HSETNX myhash field1 "bar"
(integer) 0 # 存在,操作失败

> HGET myhash field1
"foo" # 不会有『覆盖』情况出现

Hmset 命令

Hmset 命令用于同时将多个 field - value 设置到某个哈希表中,至于具体是哪个哈希表则取决于参数 key

如果 field - value 在 HashTable 中已存在,此命令会覆盖其旧值。

如果 HashTable 不存在,会创建一个空HashTable,再执行 Hmset 操作。

语法:

Hmset <key> <field1> <value1> [field2 value2] ...

如果命令执行成功,返回 OK 。

# 一次性设置 2 个 filed-value 。
> HSET myhash field1 "foo" field2 "bar"
OK

Hdel

Hdel 命令用于从某个 HashTable 中删除一个或多个 filed - value ,具体从哪个HashTable中删除,取决于参数 key ,具体删除那一个/些个 filed - value 取决于参数 filed1 ...

不存在的 filed - value 将被忽略。

语法:

HDEL <key> <field1> [ field2 ... ]

HDEL 命令返回被成功删除 field - value 的数量,其中不包括被忽略的 filed - value

> HSET myhash field1 "foo"
(integer) 1

> HDEL myhash field1
(integer) 1

> HDEL myhash field2
(integer) 0

Hexists

Hexists 命令用于查看某个HashTable中是否存在某个 filed - values

语法:

Hexists key field

如果哈希表含有给定 field - value ,返回 1 ; 果哈希表不含有给定 field - value ,返回 0 。

> HSET myhash field1 "foo"
(integer) 1

> HEXISTS myhash field1
(integer) 1

> HEXISTS myhash field2
(integer) 0

Hget

Hget 命令用于返回某个哈希表中某个 field - value 的值。

语法:

Hget <key> <field>

返回给定 filed - value 的值。如果给定的 HashTable 或 field - value 不存在,则返回 nil 。

# 字段存在
> HSET site redis redis.com
(integer) 1
   
> HGET site redis
"redis.com"

# 字段不存在
> HGET site mysql
(nil)

4. 链表命令

Lpush 命令

lpushlpoplsetlrange
linsertrpoplindex
lremllen
ltrim

Lpush 命令将一个或多个值插入到某个列表头部(左侧),具体是哪个链表由参数 key 决定。

如果链表不存在,一个空列表会被创建,而后再执行 Lpush 操作。

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

语法:

Lpush <key> <value> [ value ... ]

执行 Lpush 命令后,将返回列表的长度。

> LPUSH 9527 10
(integer) 1

> LPUSH 9527 20
(integer) 2

> LRANGE 9527 0 -1
1) "10"
2) "20"

Rpush 命令

Rpush 命令用于将一个或多个值插入到某个列表的尾部(最右边),具体是哪个列表由参数 key 决定。

如果列表不存在,一个空列表会被创建,然后再执行 Rpush 操作。

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

语法:

Rpush <key> <value> [ value ... ]

执行 Rpush 操作后,将返回列表的长度。

> RPUSH 9528 "hello"
(integer) 1

> RPUSH 9528 "world"
(integer) 2

> RPUSH 9528 "goodbye"
(integer) 3

> LRANGE 9528 0 -1
1) "hello"
2) "world"
3) "goodbye"

Lindex 命令

Lindex 命令用于通过索引获取某个列表中的元素,具体是哪个列表由参数 key 决定。

索引都是从头向尾(从左到右)的方向算,从 0 开始。

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

语法:

Lindex <key> <index>

Lindex 命令返回列表中下标所指定的位置的值。如果指定索引值不在列表的区间范围内,返回 nil 。

> LPUSH list_1 "World"
(integer) 1
   
> LPUSH list_1 "Hello"
(integer) 2
   
> LINDEX list_1 0
"Hello"
   
> LINDEX list_1 -1
"World"
   
> LINDEX list_1 3        # index不在 mylist 的区间范围内
(nil)

Llen 命令

Llen 命令用于返回某个列表的长度。

如果列表不存在,则返回 0 。

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

语法:

Llen <key>

Llen 返回列表的长度。

> RPUSH list1 "foo"
(integer) 1

> RPUSH list1 "bar"
(integer) 2

> LLEN list1
(integer) 2

Lpop 命令

Lpop 命令用于移除,并返回某个列表的第一个元素(最左侧的元素)。

语法:

Lpop <key>

Lpop 将返回列表的第一个元素;当列表不存在时,返回 nil 。

> RPUSH list1 "foo"
(integer) 1

> RPUSH list1 "bar"
(integer) 2

> LPOP list1
"foo"

Rpop 命令

Rpop 命令用于移除,并返回某个列表的最后一个元素(最右侧的元素)。

语法:

RPOP key

Rpop 命令将会返回列表的最后一个元素;当列表不存在时,返回 nil 。

> RPUSH mylist "hello"
(integer) 1

> RPUSH mylist "hello"
(integer) 2

> RPUSH mylist "foo"
(integer) 3

> RPUSH mylist "bar"
(integer) 4

> RPOP mylist
OK

> LRANGE mylist 0 -1
1) "hello"
2) "hello"
3) "foo"

Linsert 命令

Linsert 命令用于在某个列表的元素(锚点元素)前或者后插入元素。

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

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

当指定的锚点元素不存在于列表中时,不执行任何操作。

语法:

Linsert <key> [before | after] <pivot> <value>

如果 Linsert 命令执行成功,返回插入操作完成之后,列表的长度;如果没有找到指定元素 ,返回 -1;如果类表不存在或为空列表,返回 0 。

> RPUSH list1 "foo"
(integer) 1

> RPUSH list1 "bar"
(integer) 2

> LINSERT list1 BEFORE "bar" "Yes"
(integer) 3

> LRANGE mylist 0 -1
1) "foo"
2) "Yes"
3) "bar"

Lrange 命令

Lrange 返回某个列表中指定区间内的元素,区间以参数 startend 指定。其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。

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

语法:

Lrange <key> <start> <end>

Lrange 命令返回一个列表,包含指定区间内的元素。

> LPUSH list1 "foo"
(integer) 1

> LPUSH list1 "bar"
(integer) 2

> LPUSHX list1 "bar"
(integer) 0

> LRANGE list1 0 -1
1) "foo"
2) "bar"
3) "bar"

Lrem 命令

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

count 的值可以是以下几种:

  • count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 count

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

  • count = 0 : 移除表中所有与 VALUE 相等的值。

语法:

Lrem <key> <count> <value>

Lrem 命令返回被移除元素的数量。 列表不存在时返回 0 。

> RPUSH mylist "hello"
(integer) 1

> RPUSH mylist "hello"
(integer) 2

> RPUSH mylist "foo"
(integer) 3

> RPUSH mylist "hello"
(integer) 4

> LREM mylist -2 "hello"
(integer) 2

5. 集合(Set)命令

特点:

  • 无序

  • 无重复

  • 集合间操作

集合内 API集合间 API
saddsdiff
sremsinter
scardsunion
sismember
srandmember
smembers
spop

Sadd 命令

Sadd 命令将一个或多个成员元素加入到某个集合中,已经存在于集合的成员元素将被忽略。

假如集合不存在,则创建一个新的集合,而后再执行 Sadd 操作。

key 对应的并非集合类型时,返回一个错误。

语法:

Sadd <key> <value> [ value ... ]

Sadd 命令将被添加到集合中的新元素的数量,不包括被忽略的元素。

> SADD myset "hello"
(integer) 1

> SADD myset "foo"
(integer) 1

> SADD myset "hello"
(integer) 0

> SMEMBERS myset
1) "hello"
2) "foo"

Scard 命令

Scard 命令返回某个集合中元素的数量。

语法:

SCARD <key>

Scard 命令将返回集合中元素的数量;当集合 key 不存在时,返回 0 。

> SADD myset "hello"
(integer) 1

> SADD myset "foo"
(integer) 1

> SADD myset "hello"
(integer) 0

> SCARD myset
(integer) 2

Sismember 命令

Sismember 命令判断成员元素是否是某个集合的成员。

语法:

Sismember <key> <value>

如果成员元素是集合的成员,Sismsmber 将返回 1 ;如果成员元素不是集合的成员,或集合不存在,返回 0 。

> SADD myset1 "hello"
(integer) 1

> SISMEMBER myset1 "hello"
(integer) 1

> SISMEMBER myset1 "world"
(integer) 0

Smembers 命令

Smembers 命令返回某个集合中的所有的成员。

如果集合不存在,则视其为一个空集合。

语法:

Smembers <key>

Smembers 命令将返回集合中的所有成员。

> SADD myset1 "hello"
(integer) 1

> SADD myset1 "world"
(integer) 1

> SMEMBERS myset1
1) "World"
2) "Hello"

Srandmember 命令

Srandmember 命令用于从某个集合中返回一个或多个随机元素。

从 Redis 2.6 版本开始, Srandmember 命令接受可选的 count 参数:

如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合。

如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。

返回的元素并不会从集合中移除。

语法:

Srandmember <key> [ count ]

如果没有 count 参数,Srandmember 将返回一个元素;如果提供了 count 参数,那么返回一个数组;如果集合为空,返回空数组;如果集合为空,返回 nil 。

> SADD myset1 "hello"
(integer) 1

> SADD myset1 "world"
(integer) 1

> SADD myset1 "bar"
(integer) 1

> SRANDMEMBER myset1
"bar"

> SRANDMEMBER myset1 2
1) "Hello"
2) "world"

Smove 命令

Smove 命令将指定成员 member 元素从 source 集合移动到 destination 集合。

SMOVE 是原子性操作。

如果 source 集合不存在或不包含指定的 member 元素,则 SMOVE 命令不执行任何操作,仅返回 0 。

否则, member 元素从 source 集合中被移除,并添加到 destination 集合中去。

当 destination 集合已经包含 member 元素时, SMOVE 命令只是简单地将 source 集合中的 member 元素删除。

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

语法:

SMOVE <source> <destination> <member>

如果成员元素被成功移除,SMOVE 返回 1 。

如果成员元素不是 source 集合的成员,并且没有任何操作对 destination 集合执行,那么返回 0 。

> SADD myset1 "hello"
(integer) 1

> SADD myset1 "world"
(integer) 1

> SADD myset1 "bar"
(integer) 1

> SADD myset2 "foo"
(integer) 1

> SMOVE myset1 myset2 "bar"
integer) 1

> SMEMBERS myset1
1) "World"
2) "Hello"

> SMEMBERS myset2
1) "foo"
2) "bar"

Spop 命令

Spop 命令用于『随机』移除,并返回集合中的一个元素。

语法:

Spop key

被移除的随机元素。 当集合不存在或是空集时,返回 nil 。

> SADD myset1 "hello"
(integer) 1

> SADD myset1 "world"
(integer) 1

> SADD myset1 "bar"
(integer) 1

> SPOP myset1
"bar"

> SMEMBERS myset1
1) "Hello"
2) "world"

Srem 命令

Srem 命令用于移除集合中的一个或多个成员元素,不存在的成员元素会被忽略。

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

语法:

Srem <key> <member> [ member ... ]

Srem 返回被成功、实际移除的元素的数量,不包括被忽略的元素。

> SADD myset1 "hello"
(integer) 1

> SADD myset1 "world"
(integer) 1

> SADD myset1 "bar"
(integer) 1
> SREM myset1 "hello"
(integer) 1

> SREM myset1 "foo"
(integer) 0

> SMEMBERS myset1
1) "bar"
2) "world"

6. 有序集合命令

和『哈希』有点类似,有序集合中的键值对的值中,也是有两个部分:scorevalue

score 的值决定了与之对应的 value 的顺序

  • zadd

  • zrem

  • zscore

  • zincrby

  • zcard

  • zrange

  • zrangebyscore

  • zcount

  • zremrangebyrank

  • zremrangebyscore

Zadd 命令

Zadd 命令用于将一个或多个成员元素及其分数值加入到某个有序集当中。

如果某个成员已经是有序集的成员,那么更新这个成员的分数值。有序集合内部会重新调整成员元素的位置,来保证这个集合的有序性。

分数值可以是整数值或双精度浮点数。通常使用整数值。

如果有序集合不存在,则创建一个空的有序集并执行 Zadd 操作。

当 key 所对应的并非有序集类型时,返回一个错误。

语法:

Zadd <key> <score> <value> [scoren value ... ]

Zadd 命令将被成功添加的新成员的数量,不包括那些被更新的、已经存在的成员。

> ZADD set1 1 "hello"
(integer) 1
> ZADD set1 1 "foo"
(integer) 1
> ZADD set1 2 "world" 3 "bar"
(integer) 2
   
> ZRANGE set1 0 -1 WITHSCORES
1) "hello"
2) "1"
3) "foo"
4) "1"
5) "world"
6) "2"
7) "bar"
8) "3"

Zcard 命令

Zcard 命令用于计算某个集合中元素的数量。

语法:

Zcard <key>

当集合存在时,Zcard 返回有序集的基数;当集合不存在时,返回 0 。

> ZADD myset 1 "hello"
(integer) 1

> ZADD myset 1 "foo"
(integer) 1

> ZADD myset 2 "world" 3 "bar"
(integer) 2

> ZCARD myzset
(integer) 4

Zcount 命令

Zcount 命令用于计算某有序集合中指定分数区间的成员数量。

语法:

Zcount <key> <min> <max>

Zcount 返回分数值在 minmax 之间的成员的数量。

> ZADD myzset 1 "hello"
(integer) 1

> ZADD myzset 1 "foo"
(integer) 1

> ZADD myzset 2 "world" 3 "bar"
(integer) 2

> ZCOUNT myzset 1 3
(integer) 4

Zincrby 命令

Zincrby 命令对某有序集合中指定成员的分数加上增量 increment

可以通过传递一个负数值 increment ,让分数减去相应的值,比如 ZINCRBY key -5 member ,就是让 member 的 score 值减去 5 。

当有序集合不存在,或有序集合中不存在指定分数时, Zincrby 等同于 Zadd 。

当 key 对应的不是有序集时,返回一个错误。

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

语法:

Zincrby <key> <increment> <member>

Zincrby 命令返回参数 member 的新的分数值(以字符串形式表示)。

> ZADD myzset 1 "hello"
(integer) 1

> ZADD myzset 1 "foo"
(integer) 1

> ZINCRBY myzset 2 "hello"
(integer) 3

> ZRANGE myzset 0 -1 WITHSCORES
1) "foo"
2) "2"
3) "hello"
4) "3"

Zrem 命令

Zrem 命令用于移除某个有序集中的一个或多个成员,不存在的成员将被忽略。

如果 key 对应的并非是有序集类型,则返回一个错误。

语法:

Zrem <key> <member>
# 基本示例
> ZRANGE page_rank 0 -1 WITHSCORES
1) "bing.com"
2) "8"
3) "baidu.com"
4) "9"
5) "google.com"
6) "10"

# 移除单个元素
> ZREM page_rank google.com
(integer) 1
   
> ZRANGE page_rank 0 -1 WITHSCORES
1) "bing.com"
2) "8"
3) "baidu.com"
4) "9"

# 移除多个元素
> ZREM page_rank baidu.com bing.com
(integer) 2

> ZRANGE page_rank 0 -1 WITHSCORES
(empty list or set)


# 移除不存在元素
> ZREM page_rank non-exists-element
(integer) 0

Zrange 命令

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

如果需要逆序显示,请使用 Zrevrange 命令。

语法:

Zrange <key> <start> <stop> [ WITHSCORES ]

Zrange 命令将指定区间内,带有分数值(可选)的有序集成员的列表。

# 显示整个有序集成员
> ZRANGE salary 0 -1 WITHSCORES
1) "jack"
2) "3500"
3) "tom"
4) "5000"
5) "boss"
6) "10086"

# 显示有序集下标区间 1 至 2 的成员
> ZRANGE salary 1 2 WITHSCORES
1) "tom"
2) "5000"
3) "boss"
4) "10086"

# 测试 end 下标超出最大下标时的情况
> ZRANGE salary 0 200000 WITHSCORES
1) "jack"
2) "3500"
3) "tom"
4) "5000"
5) "boss"
6) "10086"

# 测试当给定区间不存在于有序集时的情况
> ZRANGE salary 200000 3000000 WITHSCORES
(empty list or set)

Zrank 命令

Zrank 返回有序集中指定成员的排名。其中有序集成员按分数值递增(从小到大)顺序排列。

语法:

ZRANK <key> <member>

如果成员是有序集的成员,ZRANK 返回 member 的排名;如果成员不是有序集的成员,返回 nil 。

# 显示所有成员及其 score 值
> ZRANGE salary 0 -1 WITHSCORES
1) "peter"
2) "3500"
3) "tom"
4) "4000"
5) "jack"
6) "5000"

# 显示 tom 的薪水排名,第二
> ZRANK salary tom
(integer) 1

Zrevrank 命令

Zrevrank 命令返回有序集中成员的排名。其中有序集成员按分数值降序排序。

使用 Zrank 命令可以获得成员按分数值升序排序。

语法:

Zrevrank <key> <member>

如果成员是有序集的成员,Zrevrank 返回成员的排名;如果成员不是有序集的成员,返回 nil 。

> ZRANGE salary 0 -1 WITHSCORES     # 测试数据
1) "jack"
2) "2000"
3) "peter"
4) "3500"
5) "tom"
6) "5000"
   
> ZREVRANK salary peter     # peter 的工资排第二
(integer) 1

> ZREVRANK salary tom       # tom 的工资最高
(integer) 0

Zscore 命令

Zscore 命令返回有序集中,成员的分数值。

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

语法:

Zscore <key> <member>

Zscore 返回成员的分数值(以字符串形式表示)。

> ZRANGE salary 0 -1 WITHSCORES    # 测试数据
1) "tom"
2) "2000"
3) "peter"
4) "3500"
5) "jack"
6) "5000"
   
> ZSCORE salary peter              # 注意返回值是字符串
"3500"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值