全面理解 Redis 的指南

2025-05-25

全面理解 Redis 的指南

作者:Alexander Nnakwue✏️

介绍

根据其Git Hub存储库,Redis(代表远程目录服务器是一个内存数据结构存储。它是一个磁盘持久化的键值数据库,支持多种数据结构或数据类型

这意味着,Redis 虽然支持基于键值对的字符串来存储和检索数据(类似于传统数据库中支持的数据模型),但它也支持其他复杂的数据结构,例如列表、集合等。接下来,我们将了解 Redis 支持的数据结构,并学习 Redis 的独特功能。

Redis 是一个开源、高复制高性能的非关系型数据库和缓存服务器。它通过使用一种预定义的数据模型将键映射到值来工作。其优点包括:

  • 基于映射键值的缓存系统,几乎可以与memcached媲美
  • 没有关于定义严格数据模式或表的严格规则(无模式)
  • 支持多种数据模型或类型
  • 与其他类型的数据库系统相比,提供更多高级功能
  • 通过分片技术,能够承受每秒多个并发写入请求或事务
  • 可以与其他数据库一起使用,作为支持以减少负载并提高性能,但也可以用作主数据库。请注意,这通常取决于个人需求和用例
  • 在快速数据提取和数据完整性方面非常有用,高效率和复制等特性至关重要

注意:Redis 在大型企业应用中有多种用例。除了充当缓存服务器外,它还可以充当消息代理或用于发布者/订阅者类型的系统。有关其他用例的详细信息,请参阅文档的此部分

先决条件

在继续之前,建议在我们的机器上安装 Node 和 npm。操作说明可在此处获取。此外,如果要在本地安装 Redis,我们可以访问文档的此部分。

虽然我们将使用 Redis 的云托管版本——Redis Labs,但我们也会在我们的机器上进行本地设置。这将使我们能够在使用命令行实用程序的同时进行学习。

LogRocket 免费试用横幅

安装 Redis

要在本地机器上安装 Redis,我们可以下载最新的可用二进制文件。或者,我们也可以使用以下命令进行下载:

wget http://download.redis.io/releases/redis-5.0.7.tar.gz
Enter fullscreen mode Exit fullscreen mode

下载二进制文件后,我们可以继续提取它:

tar xzf redis-5.0.7.tar.gz
cd redis-5.0.7
make
ls
cd src/
Enter fullscreen mode Exit fullscreen mode

如上所示,解压二进制文件后,我们可以进入redis目录并运行make命令,该命令将编译并构建 Redis 正常运行所需的所有可执行文件。请注意,在撰写本文时,当前的 Redis 版本为 5.0.7。

要在本地启动 Redis,我们要做的就是运行以下命令:

./redis-server
Enter fullscreen mode Exit fullscreen mode

为了测试Redis与服务器的连接是否成功,我们可以打开一个新的终端窗口并运行:

redis-cli ping
Enter fullscreen mode Exit fullscreen mode

输出应该是:

PONG
Enter fullscreen mode Exit fullscreen mode

最后,为了启动 Redis CLI,以便实验并开始学​​习如何使用 Redis 命令,我们可以运行:

./redis-cli
Enter fullscreen mode Exit fullscreen mode

启动 CLI 后,我们可以继续运行该info命令来查看当前正在运行的 Redis 实例的所有参数。输出如下所示。请注意,为了简洁起见,此处略去了输出内容:

127.0.0.1:6379> info
# Server
redis_version:5.0.7
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:e3be448653a99bb8
redis_mode:standalone
os:Darwin 18.7.0 x86_64
arch_bits:64
multiplexing_api:kqueue
atomicvar_api:atomic-builtin
gcc_version:4.2.1
process_id:98832
run_id:c63164944a269066f81b9bbc553296614fcb3df6
tcp_port:6379
uptime_in_seconds:374
uptime_in_days:0
hz:10
configured_hz:10
lru_clock:443996
executable:/Users/alexander.nnakwue/Downloads/redis-5.0.7/src/./redis-server
config_file:

# Clients
connected_clients:1
client_recent_max_input_buffer:2
client_recent_max_output_buffer:0
blocked_clients:0
Enter fullscreen mode Exit fullscreen mode

让我们redis-cli用最基本的 Redis 命令SET和来进行实验GET,以确保我们已成功连接到服务器:

SET mykey "Hello world"
Enter fullscreen mode Exit fullscreen mode

这里我们将 key 设置mykey为字符串 value "Hello world"。该命令的输出如下所示:

OK
Enter fullscreen mode Exit fullscreen mode

现在,我们可以get使用该键运行命令来获取值:

get mykey
Enter fullscreen mode Exit fullscreen mode

输出如下所示:

"Hello world"
Enter fullscreen mode Exit fullscreen mode

有关所有可用 Redis 命令的完整列表,请参阅Redis 文档的此部分中的参考。

注意:要正确安装 Redis,请查看文档的此部分。如果我们不打算在实际或生产应用程序中使用托管 Redis 服务器/实例,那么这部分是绝对必要的。但是,对于一些简单的操作和开发目的,我们之前的安装设置可以正常工作。

Redis Labs 的云替代方案

首先,我们可以访问Redis Labs(一个完全由云管理的 Redis 替代方案)来设置我们的帐户。在本教程中,我们将使用免费套餐,这基本上是一个用于开发和测试目的的有限选项。

创建新的 Redis Labs 订阅
图 1:为免费套餐选项创建新的订阅。

完成当前配置后,我们可以继续设置数据库,如下所示:

在 Redis Labs 中创建数据库
图 2:数据库创建界面。

完成数据库设置后,我们现在应该能够在仪表板上查看当前订阅:

带有端点 URL 的数据库订阅
图 3:包含 30MB 免费套餐端点 URL 的订阅。

redis-cli请注意,我们可以使用或连接到 Redis 数据库telnet。通过 CLI 连接集群的命令如下所示:

redis-cli -h <redic-host> -p <redis-port> -a <password>
Enter fullscreen mode Exit fullscreen mode

有关设置的更多信息可以在这里找到。

Redis 的用例

Redis 的数据保存在内存中,而传统的数据库则将数据持久化到磁盘。这使得 Redis 相较于其他类型的存储系统更具优势,并拥有极快的运行速度、高吞吐量和低延迟。因此,Redis 可以用于实时应用程序和消息队列系统。其他用例包括:

会话管理

Redis 在应用程序级别管理用户会话方面也非常实用。典型的 Web 应用程序会存储用户会话信息,例如用户登录信息、用户 ID、最近的用户操作等等。有关在 Redis 中实现会话管理的详细信息,请参阅此处

缓存

对于应用用户经常需要或检索的数据,缓存可以充当临时数据存储,以便快速检索,无需额外的数据库往返。请注意,存储在缓存中的数据通常是来自先前查询的数据或存储在其他地方的数据副本。此功能至关重要,因为我们可以从缓存中获取的数据越多,系统整体运行速度就越快、效率就越高。

有关 Redis 用例的更多详细信息,例如发布者/订阅者系统、欺诈检测、排行榜和数据提取等,可以在Redis 企业文档的此部分中找到。

Redis 数据结构和相关命令

Redis 在根据特定用例进行数据建模方面非常灵活。如前所述,它允许我们将键映射到字符串和其他可用的受支持数据类型。其他支持的数据类型/模型包括列表、集合、哈希、有序集合、流等等。

与传统数据库不同,Redis 支持其他数据模型,从而消除或最大程度地减少了将一种数据类型转换为另一种数据类型所需的时间。

有关每种数据类型的定义和用例的详细信息,您可以查看 Redis 文档的此部分,其中详细说明了如何以及何时针对 Redis 服务器针对这些数据类型发出 Redis 命令。所有 Redis 命令的完整列表也可以在此处找到

在文档/指南中,每个命令都映射到其可操作的相应数据类型。下一节我们将尝试其中几个命令。现在让我们了解一些数据结构。

细绳

Redis 提供了一些命令,用于对字符串数据类型的部分或全部进行操作。字符串数据类型还可以存储整数和浮点数。以下是用于操作字符串的命令的文档链接。我们之前已经看过一个如何使用字符串数据类型的示例。

Redis 的集合存储一组唯一的数字,与大多数编程语言中的集合非常相似。我们可以向集合中添加和删除元素,检查元素是否存在等等。关于集合的使用详情,请参阅此处。有关集合数据结构的相关命令,请参阅文档的此部分。

排序集

Redis 中的有序集合与普通集合类似,但按分数排序。除了对集合进行诸如添加和删除之类的常规操作外,我们还可以根据分数获取有序集合的详细信息。有关有序集合数据结构的相关命令,可以查看文档的此部分。

列表

Redis 也支持列表数据结构。列表按插入顺序(即 FIFO,先进先出)保存字符串集合。我们可以从两端弹出或推送元素,等等。有关列表数据结构的相关命令,可以查看文档的此部分。

哈希

Redis 哈希存储一组字段值对。我们可以执行诸如添加、删除以及从哈希中获取单个项目之类的操作。我们还可以使用该INCRBY()命令或其他方式将哈希用作计数器。有关哈希数据结构的相关命令,我们可以查看文档的此部分。

请注意,可以在此处找到有关了解 Redis 中可用的其他数据结构(如位图、流、HyperLogLog、位域等)的链接

对于键,我们可以检查它们是否存在。此外,我们可以删除或使键过期,甚至可以增加/减少键。

在下一节 Node.js 中,我们将学习如何在实际应用中使用这些命令。敬请期待!

Redis 和 Node.js

首先,我们可以创建一个目录,并随意命名。然后,我们进入该目录并运行npm init命令。完成所有必要的设置后,我们可以通过运行以下命令来安装应用程序的所有依赖项:

npm install redis concurrently dotenv --save
Enter fullscreen mode Exit fullscreen mode

然后我们可以继续创建所有必要的文件和文件夹,如下所示:

我们的项目文件夹结构
图 4:我们项目的文件夹结构。

从订阅详情中,我们可以获取连接到 Redis 实例所需的参数。示例如下,位于我们的sample.env文件中。实际凭证存储在env文件中,并在文件中引用config。文件如下所示:

app_port=6006
host=host
port=port
password=password
Enter fullscreen mode Exit fullscreen mode

文件内容config如下所示:

const path = require('path');
require('dotenv').config();
const config= {
    port: process.env.APP_PORT,
    redis: {
    host: process.env.REDIS_HOST,
    port: process.env.REDIS_PORT,
    password: process.env.REDIS_PASSWORD
    }
}
module.exports = config;
Enter fullscreen mode Exit fullscreen mode

如上图所示,我们有一个redisClientConfig文件,用于处理与 Redis 服务器的连接。该文件的内容如下所示:

const redis = require('redis');
const config = require('./config');
const client = redis.createClient(config.redis.port, config.redis.host, {no_ready_check: true});
client.auth(config.redis.password);
client.on('error', error => console.error('Error Connecting to the Redis Cluster', error));
client.on('connect', () => {
    console.log('Successfully connected to the Redis cluster!');
  });

module.exports = client;
Enter fullscreen mode Exit fullscreen mode

test.js此外,目录中的文件中提供了应用 Redis 命令的各种测试用例的示例app。请注意,我们也可以选择使用redis-cli.

该文件的内容如下所示:

const redisConnection = require('../redisClientConnection');

// test redis server
redisConnection.set('foo', 'bar');
    redisConnection.get('foo', function (err, res) {
        console.log(res.toString()); 
    });

// Retrieving a string value from Redis if it already exists for this key - Redis cache example 
redisConnection.get('myStringKey', (err, value) => {
    if (value) {
    console.log(`The value associated with this key is:${value}`)
    }
    else { 
    // Storing a simple string in the Redis store
    redisConnection.set('myStringKey', 'LogRocket Redis Tutorial');
    }
});
Enter fullscreen mode Exit fullscreen mode

如上面的代码片段所示,我们正在导入 Redis 集群的连接。然后,我们根据用例或需求针对数据结构使用命令。

这个 Git Hub仓库提供了大量详尽的 Redis 示例和实际用例。请注意,这旨在帮助您使用Node.js 客户端库与 Redis 进行交互。最后,这是该项目的仓库

请注意,我们可以使用以下命令测试代码redis-cli,或者也可以启动 Redis 服务器。我们可以通过运行以下npm run dev命令来执行此操作,得到以下输出:

启动我们的应用程序后的控制台输出
图 5:启动应用程序时控制台的输出。

结论

总而言之,Redis 通过本教程中概述的优化,提供了高性能和高效的读写功能。有关学习 Redis 的更多信息以及可用的资源,请访问文档

本教程中,我们介绍了 Redis 的基本命令,以及一些更复杂的命令以及如何在我们的应用程序中使用它们。之前已经提到了使用 Node.js 进行这些操作的说明。如果您有任何问题或反馈,请在下方评论框中留言,或在Twitter上给我留言。继续学习!


仅 200 ‎✅:监控失败并显示生产中的 GraphQL 请求

虽然 GraphQL 有一些调试请求和响应的功能,但确保 GraphQL 可靠地向生产环境应用提供资源才是重中之重。如果您希望确保向后端或第三方服务发出的网络请求成功,不妨尝试 LogRocket。

替代文本

LogRocket就像 Web 应用的 DVR,可以记录您网站上发生的所有事件。您无需猜测问题发生的原因,而是可以汇总并报告有问题的 GraphQL 请求,从而快速了解根本原因。此外,您还可以跟踪 Apollo 客户端状态并检查 GraphQL 查询的键值对。

LogRocket 会为您的应用提供工具,记录基准性能时间,例如页面加载时间、首字节加载时间、慢速网络请求,以及 Redux、NgRx 和 Vuex 的操作/状态。立即免费开始监控。


文章《全面理解 Redis 的指南》最先出现在LogRocket 博客上。

文章来源:https://dev.to/bnevilleoneill/a-guide-to-filled-understanding-redis-1gjc
PREV
使用 React Hooks 和 GreenSock 实现动画
NEXT
开发者倡导的难点(对我来说)