Redis 中的基本数据管理

RedisRedisBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在这个实验(Lab)中,你将探索 Redis 中的基本数据管理技术。你将从学习如何使用原子性的 INCRDECR 命令来递增和递减数值开始,这适用于计数器和速率限制器(rate limiters)。你将使用 redis-cli 连接到 Redis 服务器,设置初始值,然后递增和递减它们,并使用 GET 命令验证结果。

此外,你将学习如何使用 KEYS 命令检索存储在 Redis 中的所有键(keys)。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL redis(("Redis")) -.-> redis/RedisGroup(["Redis"]) redis/RedisGroup -.-> redis/access_cli("Connect Using CLI") redis/RedisGroup -.-> redis/fetch_string("Get String Value") redis/RedisGroup -.-> redis/remove_key("Delete Single Key") redis/RedisGroup -.-> redis/increment_int("Increase Integer Value") redis/RedisGroup -.-> redis/decrement_int("Decrease Integer Value") subgraph Lab Skills redis/access_cli -.-> lab-552076{{"Redis 中的基本数据管理"}} redis/fetch_string -.-> lab-552076{{"Redis 中的基本数据管理"}} redis/remove_key -.-> lab-552076{{"Redis 中的基本数据管理"}} redis/increment_int -.-> lab-552076{{"Redis 中的基本数据管理"}} redis/decrement_int -.-> lab-552076{{"Redis 中的基本数据管理"}} end

使用 INCR/DECR 递增和递减数值

在此步骤中,你将学习如何使用 INCRDECR 命令来递增和递减存储在 Redis 中的数值。这些命令是原子性的(atomic),这意味着它们保证在执行时不会受到其他客户端的干扰,这使得它们适用于计数器和速率限制器(rate limiters)等任务。

首先,让我们在终端中使用 redis-cli 命令连接到 Redis 服务器:

redis-cli

现在,让我们将名为 mycounter 的键(key)设置为初始值 10。这将在 Redis 数据库中创建一个键值对(key-value pair)。键是 mycounter,值是 10

SET mycounter 10

你应该看到以下输出,确认该键已成功设置:

OK

INCR 命令将键的值递增 1。让我们递增 mycounter

INCR mycounter

输出将是递增后的值:

(integer) 11

要验证该值,你可以使用 GET 命令:

GET mycounter

输出应为:

"11"

DECR 命令将键的值递减 1。让我们递减 mycounter

DECR mycounter

输出将是递减后的值:

(integer) 10

再次,使用 GET 验证该值:

GET mycounter

输出应为:

"10"

如果键不存在,INCRDECR 会将其视为包含值 0。让我们尝试递增一个不存在的名为 newcounter 的键:

INCR newcounter

输出将是:

(integer) 1

现在,检查 newcounter 的值:

GET newcounter

输出应为:

"1"

类似地,递减一个不存在的键会将其视为 0 并将其递减为 -1。

DECR anothercounter

输出将是:

(integer) -1
GET anothercounter

输出应为:

"-1"

最后,退出 redis-cli

exit

重要的是在完成命令后退出 redis-cli,以便正确记录命令历史记录。

使用 KEYS 检索所有键

在此步骤中,你将学习如何使用 KEYS 命令来检索存储在 Redis 中的所有键(keys)。虽然 KEYS 对于开发和调试很有用,但通常不建议在具有大型数据集的生产环境中使用,因为它在迭代所有键时可能会阻塞服务器。

首先,使用 redis-cli 连接到 Redis 服务器:

redis-cli

在上一步中,你创建了几个键:mycounternewcounteranothercounter。让我们添加更多键,使示例更有趣。

SET user:1000:name "John"
SET user:1000:age 30
SET user:1001:name "Jane"

现在,使用带有 * 模式的 KEYS 命令来检索数据库中的所有键:

KEYS *

输出将是所有键的列表:

1) "anothercounter"
2) "user:1000:age"
3) "user:1001:name"
4) "mycounter"
5) "newcounter"
6) "user:1000:name"

键的顺序可能会有所不同。

你还可以使用模式(patterns)来检索与特定模式匹配的键。例如,要检索所有以 user: 开头的键,请使用以下命令:

KEYS user:*

输出将是:

1) "user:1000:age"
2) "user:1001:name"
3) "user:1000:name"

另一个例子,要检索所有包含 counter 的键,请使用以下命令:

KEYS *counter*

输出将是:

1) "anothercounter"
2) "mycounter"
3) "newcounter"

请记住,在大型数据库上使用 KEYS * 可能会影响性能。对于生产环境,请考虑使用 SCAN 代替,它以非阻塞的方式迭代键空间(keyspace)。

最后,退出 redis-cli

exit

使用 TYPE 检查数据类型

在此步骤中,你将学习如何使用 TYPE 命令来检查存储在 Redis 中的键(key)的数据类型。Redis 支持各种数据类型,包括字符串(strings)、列表(lists)、集合(sets)、有序集合(sorted sets)和哈希(hashes)。了解键的数据类型对于对其执行适当的操作至关重要。

首先,使用 redis-cli 连接到 Redis 服务器:

redis-cli

在之前的步骤中,你创建了几个具有不同值的键。让我们检查它们的数据类型。

首先,让我们检查 mycounter 键的数据类型:

TYPE mycounter

输出将是:

string

这表明 mycounter 存储为字符串,即使它包含数值。当使用 SET 时,Redis 会自动将数值转换为字符串。

接下来,让我们检查 user:1000:name 键的数据类型:

TYPE user:1000:name

输出将是:

string

这也表明 user:1000:name 存储为字符串。

现在,让我们检查一个不存在的键的数据类型,例如 nonexistentkey

TYPE nonexistentkey

输出将是:

none

这表明该键在数据库中不存在。

为了进一步说明数据类型,让我们创建一个列表:

LPUSH mylist "item1"
LPUSH mylist "item2"

现在,检查 mylist 的数据类型:

TYPE mylist

输出将是:

list

这确认 mylist 存储为列表。

类似地,你可以创建其他数据类型,如集合、有序集合和哈希,并使用 TYPE 命令来验证它们的类型。例如:

SADD myset "member1"
SADD myset "member2"
TYPE myset

输出将是:

set
ZADD mysortedset 1 "element1"
ZADD mysortedset 2 "element2"
TYPE mysortedset

输出将是:

zset
HSET myhash field1 "value1"
HSET myhash field2 "value2"
TYPE myhash

输出将是:

hash

最后,退出 redis-cli

exit

使用 FLUSHDB 清除数据

在此步骤中,你将学习如何使用 FLUSHDB 命令从当前选择的 Redis 数据库中清除所有数据。此命令在开发或测试期间重置数据库非常有用。在生产环境中使用此命令时要小心,因为它会永久删除数据库中的所有数据。

首先,使用 redis-cli 连接到 Redis 服务器:

redis-cli

在刷新数据库之前,让我们验证是否存在键(keys)。使用 KEYS * 命令:

KEYS *

你应该看到你在之前的步骤中创建的键的列表,例如 mycounternewcounteruser:1000:namemylist

现在,执行 FLUSHDB 命令:

FLUSHDB

输出将是:

OK

这表明数据库已成功刷新。

要验证数据库现在是否为空,请再次使用 KEYS * 命令:

KEYS *

输出将是一个空列表:

(empty array)

这确认所有键已从数据库中删除。

重要的是要理解 FLUSHDB 仅清除当前选择的数据库。Redis 支持多个数据库(默认编号为 0 到 15)。如果要清除所有数据库,可以使用 FLUSHALL 命令。但是,我们不会在本实验(lab)中使用 FLUSHALL,以避免意外的数据丢失。

最后,退出 redis-cli

exit

总结

在这个实验(lab)中,你学习了 Redis 中的基本数据管理技术。具体来说,你练习了使用原子性的 INCRDECR 命令来递增和递减数值,这对于实现计数器和速率限制器非常有用。你还了解到,如果键(key)不存在,这些命令会将其视为包含值 0。

此外,你还了解了用于检索存储在 Redis 中的所有键的 KEYS 命令。虽然它对于开发和调试很有用,但通常不建议在具有大型数据集的生产环境中使用。最后,你学习了如何检查数据类型和清除数据库。