Redis 和 PHP 快速数据存储入门

流行的 Redis 存储引擎是任何软件开发人员的必备工具。 内存中的存储引擎能够以惊人的速度存储和检索数据,每秒高达 3200 万次查询,使其成为任何主要数据库引擎的主要补充。

让我们深入了解如何加快我们的在线运营。

Redis:优点与缺点

Redis 最大的好处是它是一个纯粹的内存数据存储,这意味着它的速度非常快,因为数据库存储在 RAM 中,因此不需要对硬盘进行文件 I/O 操作。

其他额外的好处是它的简单性,通过 Redis-cluster 支持集群,加上它对八种不同数据类型的支持,为您提供了根据需要存储和管理数据所需的灵活性。

然而,它最大的缺点也是它纯粹是一个内存数据存储,因此有大小限制。 这取决于您的服务器基础架构,但为了本文和简单起见,您的典型 Redis 数据库最多只能保存 2-4GB 的数据。

这意味着 Redis 用于补充流行的数据库引擎,如 mySQL、PostgreSQL 和 MongoDB,而不是作为替代品。 Redis 的主要用途包括缓存、将在短时间内过期的临时/最近数据或经常访问的小块数据。

如何安装 Redis

假设您正在运行 Ubuntu 或任何包含 apt-get 命令的 Linux 发行版,要安装 Redis,只需在终端中运行以下命令:

sudo apt-get install redis-server

接下来,检查以确保 Redis 已成功安装。 在终端中,运行以下命令:

redis-cli --version

这应该打印您正在运行的 Redis 版本,假设是这样,运行以下命令以连接到 Redis:

redis-cli

这将在终端中为您提供一个非标准的 Redis 提示,如下所示:

127.0.0.1:6379>

字符串命令

Redis 中的每个条目都由一个键标识,该键可以是您希望的任何非空白字符串。 字符串只包含一个值,并且对于 example,在 Redis 提示符下运行以下命令,为几个键设置一个值。

127.0.0.1:6379>  set full_name "John Doe"
127.0.0.1:6379> set units 5

您现在可以使用 keys 命令列出 Redis 数据库中当前的所有键。

127.0.0.1:6379>  keys *

这将导致显示您之前设置的两个键, 全名单位. 您可以使用 get 命令查看这些键的值。

127.0.0.1:6379>  get full_name
"John Doe"
127.0.0.1:6379> get units
5

使用 del 命令可以轻松删除密钥。

127.0.0.1:6379>  del full_name

也可以使用 欣克比 命令。 以下将“单位”键从 5 增加到 7。

127.0.0.1:6379>  incrby units 2

列出命令

Redis 中的列表是具有特定顺序的一维数组,允许在列表的不同位置存在重复项。 项目可以添加到列表的左侧或右侧 命令。

127.0.0.1:6379>  lpush colors blue
127.0.0.1:6379> rpush colors red yellow green

从上面可以看出 example,您可以在单个命令中将多个项目推送到列表中。 我们现在可以使用 兰格 命令。

127.0.0.1:6379>  lrange colors 0 -1

命令末尾有两个整数,第一个定义列表中开始的位置,第二个是要返回的项目数,-1 表示所有项目。 上述命令的结果将是, 蓝色, 红色, 黄色, 绿色.

您也可以使用 流行音乐rpop 命令。

127.0.0.1:6379>  lpop colors
blue
127.0.0.1:6379> rpop colors
green

您还可以使用 命令。

127.0.0.1:6379>  llen colors
(integer) 2

最后,您可以通过 雷姆 命令。

127.0.0.1:6379>  lrem colors 1 green
(integer) 1

雷姆 命令以列表名称开头,后跟要删除的出现次数,以及要删除的元素的名称。 它将返回从列表中找到并删除的出现次数。

哈希命令

Redis 中最流行的数据类型之一是哈希,它允许您在单个条目中存储多个键值对。 键不需要存在,您可以随时使用 hset 命令。

127.0.0.1:6379>  hset user:581 full_name "Jane Doe"
127.0.0.1:6379> hset user:581 points 500

您还可以使用以下命令在单个命令中定义哈希的多个键值对 hmset 命令。

127.0.0.1:6379>  hmset user:581 email [email protected] gender F

键标识的哈希 用户:581 现在总共有四个键值对,所有这些都可以通过 hgetall 命令。

127.0.0.1:6379>  hgetall user:581
1) "full_name"
2) "Jane Doe"
3) "points"
4) "500"
5) "email"
6) "[email protected]"
7) "gender"
8) "F"

您还可以使用 得到 命令。

127.0.0.1:6379>  hget user:581 email
"[email protected]"

对于散列中的任何整数,您可以使用代码将它们增加指定的数量 欣克比 命令。

127.0.0.1:6379>  hincrby user:581 points 20
(integer) 520

的价值 积分 散列中的键现在已经增加了 20 到 520。散列中的单个键值对可以用 硬盘驱动器 命令。

127.0.0.1:6379>  hdel user:581 gender

或者,您也可以使用 德尔 命令。

127.0.0.1:6379>  del user:581

过期的 Redis 密钥

Redis 的另一个优秀特性是能够在定义的秒数后使用 到期 命令。 请注意,您只能使完整的键失效,而不是列表或散列中的单个元素。 为了 example:

127.0.0.1:6379>  expire full_name 10

这会将过期时间设置为 10 秒 全名 您在字符串部分创建的键。 运行上述命令后,等待 10 秒,然后再次尝试检索键的值。

127.0.0.1:6379>  get full_name
(nil)

正如预期的那样,密钥现在已经过期,因此我们得到空值。

使用 PHP 连接到 Redis

现在您已经了解了如何使用 Redis 存储和检索数据的基础知识,是时候将其连接到您的软件中了。 所有编程语言都有 Redis 的模块/扩展,但为此 example,我们将使用 PHP。

您首先必须安装 PHP-Redis 扩展,因为默认情况下未安装。 在终端中,运行命令。

sudo apt-get install php-redis

安装后,请确保重新启动 PHP-fpm,以便正确加载扩展。 这是一些连接到 Redis 并与之交互的 PHP 代码。

<?php
// Connect to redis
$conn = new redis();
try {
$conn->connect('127.0.0.1', 6379, 5);
} catch (RedisException $e) {
die("Unable to connect to redis");
}
// Set string
$conn->set('country', 'Canada');
// Get string
$value = $conn->get('country');
echo "Country is: $value
";
// Define a profile
$profile = [
'username' => 'mike',
'full_name' => 'Mike Smith',
'email' => '[email protected]',
'country' => 'Australia'
];
// Create a hash
$conn->hmset('user:188', $profile);
// Get all values of the profile hash
$values = $conn->hgetall('user:188');
print_r($values);
// Get only the e-mail address
$email = $conn->hget('user:188', 'email');
echo "E-mail is: $email
";
// Expire the hash in 15 seconds
$conn->expire('user:188', 15);

以上 example 代码应该很简单。 它首先以 5 秒的超时时间连接到 Redis,然后继续设置并获取字符串和哈希。 所有 Redis 命令都可以通过 OOP 执行,方法是直接从 Redis 对象调用它们,如上例所示。

你在你的路上!

恭喜,您已经了解了如何通过 Redis 存储引擎以极快的速度存储和检索数据的基础知识,包括如何使用 PHP 连接和接口 Redis。

请注意,本文仅涵盖非常基础的内容,并且 Redis 数据类型 文档页面是继续探索 Redis 及其所有功能的好地方。