介绍
在这个实验(Lab)中,你将探索 Redis 中的基本数据管理技术。你将从学习如何使用原子性的 INCR
和 DECR
命令来递增和递减数值开始,这适用于计数器和速率限制器(rate limiters)。你将使用 redis-cli
连接到 Redis 服务器,设置初始值,然后递增和递减它们,并使用 GET
命令验证结果。
此外,你将学习如何使用 KEYS
命令检索存储在 Redis 中的所有键(keys)。
在这个实验(Lab)中,你将探索 Redis 中的基本数据管理技术。你将从学习如何使用原子性的 INCR
和 DECR
命令来递增和递减数值开始,这适用于计数器和速率限制器(rate limiters)。你将使用 redis-cli
连接到 Redis 服务器,设置初始值,然后递增和递减它们,并使用 GET
命令验证结果。
此外,你将学习如何使用 KEYS
命令检索存储在 Redis 中的所有键(keys)。
在此步骤中,你将学习如何使用 INCR
和 DECR
命令来递增和递减存储在 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"
如果键不存在,INCR
和 DECR
会将其视为包含值 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
命令来检索存储在 Redis 中的所有键(keys)。虽然 KEYS
对于开发和调试很有用,但通常不建议在具有大型数据集的生产环境中使用,因为它在迭代所有键时可能会阻塞服务器。
首先,使用 redis-cli
连接到 Redis 服务器:
redis-cli
在上一步中,你创建了几个键:mycounter
、newcounter
和 anothercounter
。让我们添加更多键,使示例更有趣。
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
命令来检查存储在 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
命令从当前选择的 Redis 数据库中清除所有数据。此命令在开发或测试期间重置数据库非常有用。在生产环境中使用此命令时要小心,因为它会永久删除数据库中的所有数据。
首先,使用 redis-cli
连接到 Redis 服务器:
redis-cli
在刷新数据库之前,让我们验证是否存在键(keys)。使用 KEYS *
命令:
KEYS *
你应该看到你在之前的步骤中创建的键的列表,例如 mycounter
、newcounter
、user:1000:name
和 mylist
。
现在,执行 FLUSHDB
命令:
FLUSHDB
输出将是:
OK
这表明数据库已成功刷新。
要验证数据库现在是否为空,请再次使用 KEYS *
命令:
KEYS *
输出将是一个空列表:
(empty array)
这确认所有键已从数据库中删除。
重要的是要理解 FLUSHDB
仅清除当前选择的数据库。Redis 支持多个数据库(默认编号为 0 到 15)。如果要清除所有数据库,可以使用 FLUSHALL
命令。但是,我们不会在本实验(lab)中使用 FLUSHALL
,以避免意外的数据丢失。
最后,退出 redis-cli
:
exit
在这个实验(lab)中,你学习了 Redis 中的基本数据管理技术。具体来说,你练习了使用原子性的 INCR
和 DECR
命令来递增和递减数值,这对于实现计数器和速率限制器非常有用。你还了解到,如果键(key)不存在,这些命令会将其视为包含值 0。
此外,你还了解了用于检索存储在 Redis 中的所有键的 KEYS
命令。虽然它对于开发和调试很有用,但通常不建议在具有大型数据集的生产环境中使用。最后,你学习了如何检查数据类型和清除数据库。