第九节 Redis命令行操作

亮子 2024-08-27 06:45:53 2556 0 0 0

1、设置过期时间

# 设置键 mykey 在 60 秒后过期  
EXPIRE mykey 60  
  
# 设置键 mykey 在 1000 毫秒(即1秒)后过期  
PEXPIRE mykey 1000  
  
# 设置键 mykey 在指定的UNIX时间戳(秒)后过期  
EXPIREAT mykey 1609459200  
  
# 设置键 mykey 在指定的UNIX时间戳(毫秒)后过期  
PEXPIREAT mykey 1609459200000

2、redis命令行操作String类型数据

在Redis中,字符串类型是最基本的数据类型之一,用于存储字符串值。通过Redis的命令行界面(CLI),你可以执行一系列命令来操作字符串类型的数据。以下是一些常用的字符串操作命令:

1. SET

SET key value 命令用于设置键的值。如果键不存在,该命令将创建一个新键;如果键已存在,该命令将覆盖原有值。

SET mykey "Hello, Redis!"

2. GET

GET key 命令用于获取键的值。如果键不存在,该命令将返回 (nil)

GET mykey

3. MSET

MSET key1 value1 [key2 value2 ...] 命令用于同时设置多个键值对。如果某个键已存在,则覆盖它的值。

MSET key1 "value1" key2 "value2"

4. MGET

MGET key1 [key2 ...] 命令用于同时获取多个键的值。对于不存在的键,将返回 (nil)

MGET key1 key2

5. INCR

INCR key 命令将键的值增加1。如果键不存在,其值将被初始化为0后再执行增加操作。这个命令仅适用于存储整数值的键。

INCR mycounter

6. DECR

DECR key 命令将键的值减少1。如果键不存在,其值将被初始化为-1后再执行减少操作。这个命令也仅适用于存储整数值的键。

DECR mycounter

7. INCRBY

INCRBY key increment 命令将键的值增加指定的增量值。如果键不存在,其值将被初始化为0后再执行增加操作。

INCRBY mycounter 10

8. DECRBY

DECRBY key decrement 命令将键的值减少指定的减量值。如果键不存在,其值将被初始化为-1后再执行减少操作。

DECRBY mycounter 5

9. SETNX

SETNX key value 命令用于设置键的值,仅当键不存在时。如果键已存在,该命令将不做任何操作。

SETNX newkey "newvalue"

10. SETEX

SETEX key seconds value 命令设置键的值,并为其指定过期时间(秒)。如果键已存在,该命令将覆盖原有值。

SETEX mykeyex 60 "Hello, Redis with expiration!"

11. APPEND

APPEND key value 命令将指定的值追加到键的现有值(字符串)的末尾。如果键不存在,该命令将创建一个新键。

APPEND mykey ", World!"

这些命令通过Redis的命令行界面(CLI)提供了对字符串类型数据的基本操作。你可以通过在终端或命令行界面中运行redis-cli命令来启动Redis的CLI,并输入上述命令进行操作。

3、通过命令行操作redis的list类型

在Redis中,list(列表)类型是一种简单的字符串列表,按照插入顺序排序。你可以通过Redis的命令行界面(CLI)来操作list类型的数据。以下是一些常用的list操作命令:

1. LPUSH

LPUSH key value1 [value2] ... 命令将一个或多个值插入到列表头部。如果列表不存在,一个空列表会被创建并执行 LPUSH 操作。

LPUSH mylist a
LPUSH mylist b c

这将创建一个名为mylist的列表(如果它还不存在),并依次将cba插入到列表的头部,因此列表的内容将是cba

2. RPUSH

RPUSH key value1 [value2] ... 命令将一个或多个值插入到列表的尾部(最右边)。如果列表不存在,一个空列表会被创建并执行 RPUSH 操作。

RPUSH mylist d
RPUSH mylist e f

这将把def依次插入到mylist的尾部,因此最终列表的内容将是cbadef

3. LPOP

LPOP key 命令移除并获取列表的第一个元素。

LPOP mylist

这将移除并返回mylist列表的第一个元素(在这个例子中是c),之后mylist的内容将是badef

4. RPOP

RPOP key 命令移除并获取列表的最后一个元素。

RPOP mylist

这将移除并返回mylist列表的最后一个元素(在这个例子中是f),之后mylist的内容将是bade

5. LRANGE

LRANGE key start stop 命令获取列表指定范围内的元素。

  • startstop 为索引,索引从 0 开始,其中 0 表示列表的第一个元素,1 表示第二个元素,以此类推。你也可以使用负数索引来表示从列表尾部开始的位置,-1 表示最后一个元素,-2 表示倒数第二个元素,依此类推。
  • LRANGE 命令返回指定范围内的元素列表,索引范围超出列表实际长度的部分不会返回任何内容。
LRANGE mylist 0 2

这将返回mylist列表中索引从0到2的元素,即bad

6. LLEN

LLEN key 命令返回列表的长度。

LLEN mylist

如果mylist当前包含bade,这个命令将返回4

7. LINSERT

LINSERT key BEFORE|AFTER pivot value 命令将值value插入到列表当中,位于值pivot之前或之后。如果列表不存在,一个空列表会被创建并执行 LINSERT 操作。当pivot不存在于列表中时,不进行任何操作。

LINSERT mylist BEFORE a g

如果a存在于mylist中,这将在a之前插入g

8. LREM

LREM key count value 命令移除列表元素。

  • count 的值可以是以下几种:
  • 大于 0: 移除列表中,从头部开始,与value相等的元素的第count个。
  • 小于 0: 移除列表中,从尾部开始,与value相等的元素的第abs(count)个。
  • 等于 0: 移除列表中所有与value相等的元素。
LREM mylist 0 a

这将移除mylist中所有的a元素。

通过Redis的命令行界面(CLI),你可以利用这些命令来操作list类型的数据。

4、通过命令行,如何操作redis的zset类型?

在Redis中,zset(有序集合)类型是一个不包含重复元素的字符串集合,每个元素都会关联一个double类型的分数(score)。Redis正是通过分数来为集合中的成员进行从小到大的排序。通过Redis的命令行界面(CLI),你可以执行一系列命令来操作zset类型的数据。以下是一些常用的zset操作命令:

1. ZADD

ZADD key [NX|XX] [CH] [INCR] score1 member1 [score2 member2 ...] 命令用于将一个或多个成员元素及其分数值加入到有序集合中。如果成员已经存在,则更新其分数值。

  • NX:仅当成员尚未在集合中时,才添加。
  • XX:仅当成员已在集合中时,才更新分数。
  • CH:返回操作后集合元素数量的变化。
  • INCR:将分数增加为score1,而不是设置score1
ZADD myzset 1 "one"
ZADD myzset 2 "two" 3 "three"

这将创建一个名为myzset的有序集合(如果它还不存在),并添加三个成员"one""two""three",分别带有分数123

2. ZRANGE

ZRANGE key start stop [WITHSCORES] 命令返回有序集合中指定区间的成员。成员的位置按分数值递增(从小到大)来排序。

  • startstop 为索引,索引从 0 开始,其中 0 表示集合的第一个元素,-1 表示集合的最后一个元素。
  • WITHSCORES 选项会让命令同时返回成员的分数值。
ZRANGE myzset 0 -1 WITHSCORES

这将返回myzset集合中的所有成员及其分数值。

3. ZREVRANGE

ZREVRANGE key start stop [WITHSCORES] 命令与ZRANGE命令类似,但返回的是集合中分数值从高到低排序的成员。

ZREVRANGE myzset 0 -1 WITHSCORES

这将返回myzset集合中分数值最高的成员到最低的成员及其分数值。

4. ZREM

ZREM key member1 [member2] ... 命令移除有序集合中的一个或多个成员,不存在的成员将被忽略。

ZREM myzset "two"

这将从myzset集合中移除成员"two"

5. ZSCORE

ZSCORE key member 命令返回有序集合中成员的分数值。

ZSCORE myzset "one"

这将返回myzset集合中成员"one"的分数值。

6. ZRANK

ZRANK key member 命令返回有序集合中成员的排名。排名是从 0 开始计算的,即分数最低的成员排名为 0。

ZRANK myzset "one"

这将返回myzset集合中成员"one"的排名。

7. ZREVRANK

ZREVRANK key member 命令与ZRANK命令类似,但返回的是成员从分数值最高到最低的排名。

ZREVRANK myzset "three"

这将返回myzset集合中成员"three"的逆排名(即从最高分到最低分的排名)。

8. ZINCRBY

ZINCRBY key increment member 命令为有序集合中的成员增加分数值。

ZINCRBY myzset 2 "one"

这将myzset集合中成员"one"的分数值增加2

通过Redis的命令行界面(CLI),你可以利用这些命令来操作zset类型的数据。

5、通过命令行,如何操作redis的map类型?

在Redis中,实际上并没有直接命名为“map”的数据类型。但是,Redis的hashes类型可以被用作类似map的数据结构,因为它们存储了键值对集合。Hashes特别适用于存储对象,其中每个字段(field)可以映射到一个值(value)。

以下是一些通过Redis命令行操作hashes(即类似map)的常用命令:

1. HSET

HSET key field value 命令用于为哈希表中的字段赋值。

如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。如果字段已经存在于哈希表中,该字段的旧值将被覆盖。

HSET myhash field1 "Hello"
HSET myhash field2 "World"

这将创建一个名为myhash的哈希表(如果它还不存在),并设置两个字段field1field2的值分别为"Hello""World"

2. HGET

HGET key field 命令用于获取存储在哈希表中指定字段的值。

HGET myhash field1

这将返回myhash哈希表中field1字段的值,即"Hello"

3. HGETALL

HGETALL key 命令返回哈希表中所有的字段和值。

HGETALL myhash

这将返回myhash哈希表中所有的字段和值,结果是一个包含字段和值的列表,例如1) "field1" 2) "Hello" 3) "field2" 4) "World"

4. HDEL

HDEL key field1 [field2] ... 命令用于删除哈希表中的一个或多个字段。

HDEL myhash field1

这将从myhash哈希表中删除field1字段。

5. HEXISTS

HEXISTS key field 命令用于检查哈希表中指定的字段是否存在。

HEXISTS myhash field2

如果myhash哈希表中存在field2字段,该命令将返回1,否则返回0

6. HINCRBY

HINCRBY key field increment 命令用于为哈希表中的字段值加上指定增量数。增量数可以是负数,表示对值进行减法操作。

HINCRBY myhash field3 1

如果field3不存在,其值将被初始化为0,然后再执行加法操作。如果field3已存在,其值将增加1

7. HLEN

HLEN key 命令用于获取哈希表中字段的数量。

HLEN myhash

这将返回myhash哈希表中字段的数量。

8. HKEYS

HKEYS key 命令获取哈希表中的所有字段名。

HKEYS myhash

这将返回一个包含myhash哈希表中所有字段名的列表。

9. HVALS

HVALS key 命令获取哈希表中的所有值。

HVALS myhash

这将返回一个包含myhash哈希表中所有字段值的列表。

通过Redis的命令行界面(CLI),你可以利用这些命令来操作hashes类型的数据,即类似map的结构。

6、Redis都支持哪些数据类型?

Redis支持多种数据类型,以满足不同的数据存储和访问需求。具体来说,Redis支持以下五种基本数据类型:

  1. 字符串(String)
  • Redis中最基础的数据类型,其值可以是任何类型的字符串,包括二进制数据。
  • 提供了丰富的操作命令,如SET、GET、APPEND、INCR、DECR等,支持数据的快速存取、追加、自增自减等操作。
  • 字符串类型有一个最大长度限制,即512MB。
  • 支持原子操作和持久化存储。
  1. 哈希(Hash)
  • 是一个键值对的集合,其中每个键都是唯一的字符串,而每个值都是一个字段值对(field-value pairs)。
  • 类似于Java中的Map<String, Object>,适用于存储对象类型的数据。
  • 提供了如HSET、HGET、HDEL等命令,支持对哈希表中数据的快速存取和修改。
  • 支持嵌套其他哈希类型,适用于存储复杂的数据结构。
  1. 列表(List)
  • 是一个简单的字符串列表,按照插入顺序排序,允许重复值。
  • 提供了在列表两端添加(LPUSH、RPUSH)和弹出(LPOP、RPOP)元素的操作,以及获取列表长度(LLEN)等命令。
  • 列表类型可以用于实现队列、栈等数据结构。
  • 列表最多可存储2^32-1个元素。
  1. 集合(Set)
  • 是一个无序的、唯一的字符串集合,不允许重复值。
  • 提供了添加(SADD)、删除(SREM)、查找(SISMEMBER)等操作命令,以及集合间的交集(SINTER)、并集(SUNION)、差集(SDIFF)等运算。
  • 支持快速的添加、删除和查询操作,时间复杂度通常为O(1)。
  1. 有序集合(Sorted Set,ZSet)
  • 与集合类似,但每个元素都会关联一个分数(score),用于对集合中的元素进行排序。
  • 提供了添加(ZADD)、删除(ZREM)、范围查询(ZRANGE)等操作命令,以及根据分数进行排序和查找。
  • 适用于需要排序的场景,如排行榜、成绩表等。

此外,虽然早期的Redis版本中可能不支持,但Redis后续版本还引入了如位图(Bitmap)和地理位置(Geospatial)等特殊的数据类型,以满足更广泛的数据存储和查询需求。这些特殊类型提供了对二进制数据和地理位置数据的支持,进一步扩展了Redis的应用场景。

综上所述,Redis通过支持多种数据类型,为开发者提供了灵活、高效的数据存储和访问方案。