发布于 2026-01-06 4 阅读
0

Redis 速成课程

Redis 速成课程

Redis 是一种数据库,可以添加到生产级应用程序中以提升性能。我将介绍 Redis 的基础知识,并展示一个 Redis 的实际应用案例。

本文将探讨以下内容:

  1. Redis是什么?
  2. Redis为何如此火爆?
  3. 何时使用Redis?
  4. Redis 安装
  5. Redis 基本命令
    1. 列表
    2. 哈希
  6. 使用 Redis 让你的网站速度提升 30-40%
  7. 使用 Redis 作为主数据库

那么,让我们深入探讨一下。

Redis是什么?

Redis 是一个内存数据库,延迟低于毫秒级。Redis 的全称是远程字典服务( Remote Dictionary Service)。Redis 的强大之处在于它将数据存储在内存中,而不是速度较慢的磁盘上。数据库中的每个数据点都是一个键值对。值可以是以下任何字段:

  1. 字符串 - 你好,世界
  2. 位图 - 0011001
  3. 位域 - {325}{655}{678}
  4. 哈希表 - {a: "hello", b:'world}
  5. 列表 - [ A > B > C ]
  6. 集合 - { A, B, C}
  7. 已排序集合 - {A: 1, B: 2, C: 3}
  8. 地理空间 - {A:(52, 2, 3)}
  9. Hyperlog
  10. 溪流

Redis为何如此火爆?

Redis之所以如此受欢迎,是因为它速度极快。与数据存储在速度较慢的硬盘上的关系型数据库不同,Redis将数据存储在内存(RAM)中。由于使用了内存,Redis具有易失性,这意味着当系统关闭时,数据也会丢失。因此,Redis通常不用作像MongoDB或PostgreSQL那样的持久化数据库,而是用于缓存。如今,它的功能更加强大,我将在下文中讨论。

🌟 超快数据访问:Redis 访问数据只需几毫秒,而使用传统方法则需要几百毫秒。

何时使用Redis?

Redis 并非数据库的替代品,而是构建于传统数据库之上。任何需要频繁访问的数据都可以存储在 Redis 中。

  • 当您需要频繁访问某些数据时
  • 当数据库查询语句很长,执行时间很长时,就会出现问题。

Redis 安装

  $ sudo add-apt-repository ppa:redislabs/redis
  $ sudo apt-get update
  $ sudo apt-get install redis
Enter fullscreen mode Exit fullscreen mode
  brew update
  brew install redis
Enter fullscreen mode Exit fullscreen mode
  • Windows - 使用WSL在 Windows 上安装 Redis

Redis 基本命令

启动命令

  • redis-server- 要启动 Redis 服务器,请使用以下命令
  • 要使用 Redis CLI,请打开一个新的终端并redis-cli输入命令;要关闭终端,请使用quit命令。

基本命令

  • SET name your-name- 设置值

  • GET name- 获取上述值

  • DEL name- 通过以下方式删除键值对

  • EXISTS name- 检查密钥是否存在

  • KEYS *获取所有密钥

  • flushall- 清除所有数据

到期日

  • ttl key-name- 检查密钥在自动删除前还有多少时间。如果结果为空,-1则表示未设置TTL(生存时间),密钥不会过期。
  • expire key-name 10- 设置TTL为 10 秒。
  • setex name 10 your-name- 在设置键值对时设置TTL 。

列表

当我们需要实现队列或栈时,列表就非常有用。例如在即时通讯应用中,我们可以缓存一些最近的消息。

  • lpush fruits apple将项目推到列表的左侧。
  • rpush fruits mango将项目推到列表右侧。
  • lrange fruits 0 -1- 获取列表中的所有项目。-1表示列表末尾的索引。
  • LPOP fruits- 删除列表中最左边的项目。
  • RPOP fruits- 删除列表中最右边的项目。

集合与列表类似。集合的不同之处在于它只存储唯一值。

  • SADD todo "read book"- 将项目添加到集合中。(注意:如果我们尝试再次添加“读过的书”,则不会添加成功,因为它是重复的。)
  • SMEMBERS todo- 显示待办事项集中的所有项目。
  • SREM todo "read book"- 从集合中移除物品。

哈希

LISTRedis 中的s 和SETs 存储的是项目序列,而Redis HASHes 存储的是键到值的映射。

  • HSET person name John- 这里,名字是键,John是值。
  • HGET person name- 这将返回与键名关联的值,在本例中返回John
  • HGETALL person获取该人的所有信息。
  • HDEL person name- 删除 name 属性。
  • HEXISTS person name- 检查该属性是否存在。

使用 Redis 让你的网站速度提升 30-40%

安装 Redis

npm i redis
Enter fullscreen mode Exit fullscreen mode

启动 Redis 服务器

redis-server
Enter fullscreen mode Exit fullscreen mode

导入软件包并创建实例

// Import redis package
const Redis = require('redis')

// Create redis client, in case ofer development only
const redisClient = Redis.createClient()
// Incase of production pass your production instance url and use the below line
const redisClient = Redis.createClient({ url: "your-production-url"})
Enter fullscreen mode Exit fullscreen mode

使用上述redisClient实例执行我上面提到的所有命令。例如:

redisClient.setex('photos', 3600, JSON.stringyfy(some-value-to-store))
Enter fullscreen mode Exit fullscreen mode

在添加 Redis 缓存之前

以下代码获取 900kB 大小的数据大约需要480 毫秒。

app.get("/photos", async(req, res) => {
    const albumId = req.query.albumId
    const { data } = await axios.get(
        "https://jsonplaceholder.typicode.com/photos"
        { params: { albumId }}
    )
})
Enter fullscreen mode Exit fullscreen mode

添加 Redis 缓存后

下面的代码第一次获取数据大约需要480 毫秒,而后续的重复获取数据仅需37 毫秒。这真是巨大的性能提升。

// Import redis package
const Redis = require('redis');

// Create redis client, in case ofer development only
const redisClient = Redis.createClient();
// Incase of production pass your production instance url and use the below line
const redisClient = Redis.createClient({ url: 'your-production-url' });

app.get('/photos', async (req, res) => {
  const albumId = req.query.albumId;
  redisClient.get('photos', async (error, photos) => {
    if (error) console.error(error);
    if (photos != null) {
      return res.json(JSON.parse(photos));
    } else {
      const { data } = await axios.get('https://jsonplaceholder.typicode.com/photos', {
        params: { albumId }
      });
      redisClient.setex('photos', 3600, JSON.stringyfy(data));
      res.json(data);
    }
  });
});

Enter fullscreen mode Exit fullscreen mode

在上面的例子中,我们首先检查是否已经将照片缓存到 Redis 缓存中,如果已缓存,则返回缓存值,否则从 API 获取照片。

使用 Redis 作为主要数据库

Redis 本身速度极快,无需额外的缓存层,但数据库的一项必要功能是能够对复杂的关系进行建模。别担心,Redis 完全可以满足你的需求。Redis 可以用作多模型数据库,它借助各种模块支持多种数据库范式。一些最常用的 Redis 模块包括:

  1. RediSearch - 基于 Redis 的全文搜索。
  2. RedisGraph - 一个使用稀疏邻接矩阵的基于 Cypher 的查询语言的图数据库。
  3. RedisBloom - 可扩展的布隆过滤器。
  4. RedisJson - Redis 的一种 JSON 数据类型。
  5. RedisAI - 一个用于服务张量和执行深度学习图的 Redis 模块。
  6. Neural-redis - 将在线可训练神经网络作为 Redis 数据类型。
  7. RedisTimeSeries - Redis 的时间序列数据结构。

查看redis.io/modules中的所有模块。您可以在Redis 企业云免费套餐中试用这些模块

不着急?读读这些

  1. 我最喜欢的算法(和数据结构):HyperLogLog
  2. 什么是消息代理?
文章来源:https://dev.to/milindsooya/redis-crash-course-4b7i