Redis 是一个开源的内存缓存和存储系统,也被称为数据结构服务器。它为哈希、列表、集合、位图等多种数据类型提供高级支持。由于其出色的性能,Redis 在领先的行业和顶尖的跨国公司中广受欢迎。
Redis 的优势
说到速度,Redis 服务器是无与伦比的。作为一个 NoSQL 数据库服务器,它提供了极快的数据存储和检索速度。此外,Redis 具有出色的功能,使其能够无缝处理包括复杂数据在内的不同数据。Redis 的易用性和先进功能不仅使其脱颖而出,而且使其越来越标准化,成为企业和个人用户的备选主流数据库。
下面,我们将详细介绍帮助您在 Ubuntu 20.04 软件上安装 Redis 的步骤。在本教程中,您将获得所需的所有信息,从 安装到配置外部 Redis 服务器,以用作在 Ubuntu 20.04 上运行的 PHP 应用程序的会话处理器.
入门指南
要执行这些步骤,您需要两个位于同一数据中心且启用了私有网络的不同的数据库服务器(droplet)。其中包括:
-
一个运行 LAMP 和 LEMP (在 Ubuntu 20.04 上)的 PHP Web 服务器 – 我们将该服务器称为 web.
-
第二台干净的 Ubuntu 20.04 服务器,将在其上安装 Redis – 我们将该服务器称为 redis.
步骤 1 — 安装 Redis 服务器
我们的第一步是在 Ubuntu 20.04 上安装 Redis 服务器。完成后,确保该服务器在我们的 redis Droplet 上正常运行。
在本教程中,我们将使用个人软件包存档(PPA)。出于安全原因,我们强烈建议使用 PPA。与其他第三方仓库相比,PPA 稳定、易于安装,最重要的是,该仓库是专为 Ubuntu 用户设计的。PPA 允许您获取最新的软件版本,即使是官方 Ubuntu 仓库中找不到的软件也是如此。
使用来自未授权来源的 PPA 是绝对不可取的。请确保您仅从真实且经过验证的来源获取 PPA。您可以使用以下命令添加 PPA 仓库:
|
1 |
sudo add-apt-repository ppa:chris-lea/redis-server |
按下 Enter 键进行确认。确认后,我们将使用以下命令更新包管理器缓存:
|
1 |
sudo apt-get update |
接下来,我们将使用以下命令安装 Redis:
|
1 |
sudo apt-get install redis-server |
执行该命令后,您的服务器上将安装好 Redis。让我们使用以下命令测试安装:
|
1 |
redis-cli ping |
执行该命令后,您将看到一个 Redis 实例运行在 localhost 的端口 6379 上。此外,还会有一个名为 PONG 的响应。如果您看到这些,说明您已成功完成了第一步。有关安装和保护 Redis 的详细指南,您可以查看我们的教程 如何在 Ubuntu 18.04 上安装和保护 Redis.
接下来,让我们进入下一步——配置 Redis。
步骤 2 — 配置 Redis 以接受外部连接
配置 Redis 的主要目的是接受来自外部的连接。为什么?因为默认情况下,Redis 仅允许连接到 localhost,并且限制从其他任何地方进行连接。简单来说,您只能从安装了 Redis 的服务器内部进行访问。
首先,使用 ifconfig 命令详细了解您的网络接口:
|
1 |
sudo ifconfig |
您将获得以下输出:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
eth0 链路 封装:以太网 硬件地址 04:01:63:7e:a4:01 inet 地址:188.166.77.33 广播:188.166.127.255 掩码:255.255.192.0 inet6 地址: fe80::601:63ff:fe7e:a401/64 范围:链路 UP BROADCAST RUNNING MULTICAST MTU:1500 度量值:1 接收 数据包:3497 错误:0 丢弃:0 溢出:0 帧:0 发送 数据包:3554 错误:0 丢弃:0 溢出:0 载波:0 碰撞:0 发送队列长度:1000 接收 字节:4895060 (4.8 MB) 发送 字节:619070 (619.0 KB) eth1 链路 封装:以太网 硬件地址 04:01:63:7e:a4:02 inet 地址:10.133.14.9 广播:10.133.255.255 掩码:255.255.0.0 inet6 地址: fe80::601:63ff:fe7e:a402/64 范围:链路 UP BROADCAST RUNNING MULTICAST MTU:1500 度量值:1 接收 数据包:8 错误:0 丢弃:0 溢出:0 帧:0 发送 数据包:7 错误:0 丢弃:0 溢出:0 载波:0 碰撞:0 发送队列长度:1000 接收 字节:648 (648.0 B) 发送 字节:578 (578.0 B) |
在 eth1 接口,您将找到 inet_addr。这里我们有 10.133.14.9。我们将在接下来的步骤中使用此 IP 地址来连接 redis 服务器,通过 web 服务器。
步骤 3 — 本地主机绑定
您可以自由选择使用您喜欢的代码编辑器(Atom 和 Visual Studio Code 是最受欢迎的编辑器)。
现在,打开文件 /etc/redis/redis.conf 并找到包含 bind 定义的那一行。您应该将您的 私有网络 IP 地址 添加到该行:
|
1 |
sudo vim /etc/redis/redis.conf |
|
1 |
bind localhost 10.133.14 |
您可能会看到 localhost,而不是 127.0.0.1。不用担心,您只需要添加您的私有 IP 地址。接下来,重启 Redis 服务以应用更改。使用以下命令重启 redis 服务器:
|
1 |
sudo service redis-server restart |
对于使用一键应用安装 Redis 的用户,请按照以下命令重启您的服务器:
|
1 |
sudo service redis restart |
一旦您重启了 redis 服务器,同一私有网络中的任何服务器都将自动连接到此 Redis 实例,而无需单独进行连接。
步骤 4 — 设置 Redis 服务器密码
如果您使用安装的 Redis 仅用于练习或培训目的,可以跳过此步骤。但是,如果您想为 Redis 安装添加额外的安全层,强烈建议为 redis 服务器设置密码。让我们修改与上一步相同的配置文件。使用以下命令进行编辑:
|
1 |
sudo vim /etc/redis/redis.conf |
取消注释包含 requirepass 的那一行,并设置一个强密码:
|
1 |
requirepass StrongPassword |
重启 Redis 服务以使您所做的更改生效。使用以下命令进行重启:
|
1 |
sudo service redis-server restart |
步骤 5 — Redis 连接和身份验证测试
在此步骤中,我们将从 redis 机器内部连接到 Redis 服务,以确保所有更改都按预期无缝运行。要进行连接,请使用以下命令:
|
1 |
redis-cli -h 10.133.14.9 |
在这里,即使您省略提及主机名,它仍然会运行。我们的主要目标是确保 Redis 服务无缝接受连接:
|
1 |
10.133.14.9:6379> |
在尝试使用定义的密码访问数据时,您可能会遇到 AUTH 错误:
|
1 |
10.133.14.9:6379> keys * |
您的输出将类似于以下内容:
|
1 2 |
OUTPUT: (error) NOAUTH Authentication required. |
要进行身份验证,请运行 AUTH 命令,以及您在 /etc/redis/redis.conf 文件中定义的相同密码:
|
1 |
10.133.14.9:6379> AUTH StrongPassword |
接下来,再次运行该命令:
|
1 |
10.133.14.9:6379> keys * |
这一次,您将收到 OK 作为响应,而不是错误。您将获得如下输出:
|
1 2 |
OUTPUT: (empty list 或 set) |
输出 empty list 或 set 意味着 Redis 服务器为空。这是因为我们尚未将 Web 服务器配置为会话处理器。
注意:在继续之前,请确保 SSH 会话已打开并连接到 redis-cli。在接下来的步骤中,我们将在对 web 服务器进行必要的更改后,返回 redis-cli 提示符以验证会话数据是否已正确存储。
步骤 6 — 在 Web 服务器上安装 Redis 扩展
接下来的步骤应在 web 服务器上执行。我们需要安装 PHP Redis 扩展,以便 PHP 连接到 Redis 服务器。
首先,通过运行以下命令更新包管理器缓存:
|
1 |
sudo apt-get update |
接下来,安装 php5-redis 包:
|
1 |
sudo apt-get install php5-redis |
您已准备就绪,可以连接到 Redis。
步骤 7 — 在 Web 服务器上将 Redis 设置为默认会话处理器
PHP 有一个默认的会话处理器。在此步骤中,我们将编辑 php.ini 服务器上的 web 文件以更改默认设置。 php.ini 文件的位置取决于当前的架构栈:
-
对于 LAMP 架构栈(在 Ubuntu 20.04 上),请使用: /etc/php5/apache2/php.ini.
-
对于 LEMP 架构栈(在 Ubuntu 20.04 上),路径通常为 /etc/php5/fpm/php.ini.
如果您不确定主 php.ini 文件的位置,可以借助 phpinfo() 函数。将以下代码放入 Web 根目录下名为 info.php 的文件中:
|
1 2 |
<?php phpinfo(); |
当您尝试从浏览器访问该脚本时,请搜索包含“Loaded Configuration File”的行。您将找到加载的主 php.ini 文件的确切位置。请务必删除 info.php 文件,因为它包含您环境的所有敏感内容。
之后,打开 php.ini 文件并查找包含 session.save_handler 的行。默认值将是 files,请确保将其更改为 redis.
在 LAMP 环境中:
|
1 |
$ sudo vim /etc/php5/apache2/php.ini |
在 LEMP 环境中:
|
1 |
$ sudo vim /etc/php5/fpm/php.ini |
|
1 |
session.save_handler = redis |
接下来,取消注释 session.save_path 并修改其值以包含 Redis 连接字符串。内容必须遵循以下格式:
|
1 |
tcp://IPADDRESS:PORT?auth=REDISPASSWORD |
|
1 |
session.save_path = "tcp://10.133.14.9:6379?auth=yourverycomplexpasswordhere" |
使用我们在 Step- 4. 中设置的密码。如果您没有使用设置的密码,请在配置 Redis 时提供参数 auth 。现在,保存文件并重启 php 两个环境中的服务。
在 LAMP 环境中:
|
1 |
sudo service apache2 restart |
在 LEMP 环境中:
|
1 |
sudo service php5-fpm restart |
第 8 步 — 测试 Redis 会话处理
在最后一步中,我们需要一个 PHP 脚本或应用程序来确保您的会话现在由 Redis 处理。我们将使用一个实现计数器的简单脚本 – 每次您重新加载页面时,打印的数字都会递增。
创建一个名为 demo.php 的文件,位于 web 服务器上,并将其保存在您的文档根目录文件夹中:
|
1 |
sudo sudo vim /usr/share/nginx/html/test.php |
然后,更改 /usr/share/nginx/html 以反映您的文档根路径:
|
1 2 3 4 5 6 7 |
<?php //simple counter to test sessions. should increment on each page reload. session_start(); $count = isset($_SESSION['count']) ? $_SESSION['count'] : 1; echo $count; $_SESSION['count'] = ++$count; |
接下来,您需要将浏览器指向 http://web/demo.php 以访问该脚本。每次您重新加载页面时,程序都会递增该数字。
现在,您的会话信息将存储在 Redis 服务器上。要进行验证,您需要返回到 redis 机器上的 SSH 会话,并使用 redis-cli。再次使用 keys *:
|
1 |
10.133.14.9:6379> keys * |
您将看到以下输出:
|
1 2 |
OUTPUT: 1) "PHPREDIS_SESSION:j9rsgtde6st2rqb6lu5u6f4h83" |
输出证实了所有信息都安全地存储在 redis 服务器上。如果您想连接其他 web 服务器,可以按照同样的方式进行。
结论
Redis 是一个 NoSQL 数据库,允许存储大量的非结构化数据。很少有数据库能与 redis 服务器的功能和简单性相媲美。它日益增长的普及率使其不断成为一个必备工具,与其广泛的功能相比,几乎没有替代品。
要进一步加深您对 PHP 应用程序及其使用方法的了解,可以查看我们博客中的以下教程:
- 在带有 Ubuntu 18.04 的 Kubernetes 集群上部署 PHP 应用程序
- 在 Ubuntu 20.04 上安装 phpBB
- 在 Ubuntu 18.04 上安装和保护 phpMyAdmin
祝您计算愉快!
评论
暂无评论。发表第一条评论吧。