全面了解 Redis 的指南

全面了解 Redis 的指南

介绍

根据其 GitHub 存储库,Redis(代表 Remote Directory Server)是一个内存中的数据结构存储。它是一个磁盘持久键值数据库,支持多种数据结构或数据类型。

这意味着,虽然 Redis 支持映射的基于键值的字符串来存储和检索数据(类似于传统类型的数据库中支持的数据模型),但它也支持其他复杂的数据结构,如列表、集合等。在继续的过程中,我们将查看 Redis 支持的数据结构。我们还将了解 Redis 的独特功能。

Redis 是一种开源、高度复制、高性能、非关系型数据库和缓存服务器。它的工作原理是将键映射到具有一种预定义数据模型的值。其好处包括:

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

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

先决条件

在我们继续之前,建议在我们的机器上安装 Node 和 npm。

虽然我们将使用 Redis 的云托管版本 Redis Labs,但我们还将在我们的机器上进行本地设置。这将使我们能够在使用命令行实用程序时学习。
在这里插入图片描述

安装 Redis

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

wget http://download.redis.io/releases/redis-5.0.7.tar.gz

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

tar xzf redis-5.0.7.tar.gz
cd redis-5.0.7
make
ls
cd src/

如上所示,提取二进制文件后,我们可以导航到该目录并运行该命令,该命令会编译并构建 Redis 正常运行所需的所有可执行文件。请注意,在撰写本文时,当前的 Redis 版本是 5.0.7。redismake

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

./redis-server

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

redis-cli ping

输出应为:

PONG

最后,要启动 Redis CLI,以便尝试并开始学习如何使用 Redis 命令,我们可以运行:

./redis-cli

启动 CLI 后,我们可以继续运行命令以查看当前正在运行的 Redis 实例的所有参数。输出如下所示。请注意,为了简洁起见,这里将其截断:info

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

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

SET mykey "Hello world"

在这里,我们将键设置为字符串值。此命令的输出如下所示:mykey"Hello world"

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

get mykey

输出如下所示:

"Hello world"

有关所有可用 Redis 命令的完整列表,Redis 文档的这一部分提供了参考。

注意:要正确安装 Redis,请查看文档的这一部分。如果我们不打算在实时或生产应用程序中使用托管的 Redis 服务器/实例,这是绝对必要的。但是,出于黑客攻击和开发目的,我们之前的安装设置工作正常。

Redis Labs 的云替代方案

首先,我们可以访问 Redis Labs,这是与 Redis 合作的完全云管理的替代方案,以设置我们的帐户。在本教程中,我们将使用免费层,这基本上是一个用于开发和测试目的的有限选项。
图 1:为免费套餐选项创建新订阅。

Creating A New Redis Labs Subscription

完成当前配置后,我们可以继续设置我们的数据库,如下所示:
图 2:数据库创建界面。

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

图 3:包含 30MB 免费层的终结点 URL 的订阅。

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

redis-cli -h <redic-host> -p <redis-port> -a <password>

Redis 的用例

Redis 数据保留在内存中,而不是持久保存到磁盘的传统类型的数据库。这使 Redis 比其他类型的存储系统更具优势,并使其具有高吞吐量和低延迟的超快速度。因此,Redis可以用于实时应用和消息队列系统。其他用例包括:

会话管理

Redis 在管理应用程序级别的用户会话方面也派上用场。典型的 Web 应用程序存储有关用户登录、用户 ID、最近的用户作等的用户会话信息。

缓存

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

有关 Redis 用例(如发布者/订阅者系统、欺诈检测、排行榜和数据摄取等)的更多详细信息,请参阅 Redis 企业文档的这一部分。

Redis 数据结构和相关命令

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

与传统数据库相反,Redis 支持其他数据模型可以消除或将一种数据类型转换为另一种数据类型所需的时间。

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

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

字符串

Redis 具有用于对字符串数据类型的某些部分或整个进行作的命令。字符串数据类型还可以存储整数和浮点数。这是有关用于对字符串进行作的命令的文档的链接。我们之前已经看过如何使用字符串数据类型的示例。

Redis 集存储唯一的数字集,几乎类似于大多数编程语言中的集。我们可以向集合添加和删除项目,检查项目是否存在等等。

排序集

Redis 中的排序集与常规集类似,但按分数排序。除了对加法和删除等集合的正常作外,我们还可以按分数获取排序集合中的详细信息。

列表

Redis 还支持列表数据结构。列表按插入顺序保存字符串集合,即 FIFO(先进先出)。我们可以从两端弹出和推动物品等。

散 列

Redis 哈希存储一组字段值对。我们可以执行添加、删除和从哈希中获取单个项目等作。我们还可以使用命令和其他命令将哈希值用作计数器。

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

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

Redis 和 Node.js

首先,我们可以创建一个目录并称其为任何我们想要的名称。然后我们导航到该目录并运行命令。完成所有必需的设置后,我们可以通过运行以下命令来安装应用程序的所有依赖项:npm init

npm install redis concurrently dotenv --save

然后我们可以继续创建所有必要的文件和文件夹,如下所示:
图 4:我们项目的文件夹结构。

从我们的订阅详细信息中,我们可以获得连接到 Redis 实例所需的参数。下面显示了一个示例,它位于我们的文件中。实际凭据存储在文件中,这些凭据在文件中引用。文件如下所示:sample.envenvconfig

app_port=6006
host=host
port=port
password=password

文件内容如下图所示: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;

如上面的文件所示,我们有文件,我们在其中处理与 Redis 服务器的连接。文件内容如下所示:redisClientConfig

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;

此外,应用 Redis 命令的各种测试用例的示例位于目录中的文件中。请注意,我们还可以选择使用 .test.jsappredis-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');
    }
});

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

此 GitHub 存储库中提供了一堆详尽的 Redis 示例以及实际用例。请注意,这是为了使用 Node.js 客户端库与 Redis 进行交互。最后,这是该项目的存储库。

请注意,我们可以使用 或者也可以启动我们的 Redis 服务器来测试我们的代码。我们可以通过运行命令来做到这一点,我们得到以下输出:redis-clinpm run dev

图 5:启动应用时控制台的输出。

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

我们在本教程中介绍了基本的 Redis 命令,以及一些更复杂的命令以及如何在我们的应用程序中使用它们。前面已经提到了使用 Node.js 执行此作的说明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT小哥哥呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值