用分布式缓存缩放节点。
#node #redis #scalability #caching

在本系列的第一部分中,我们探索了如何使用带有redis的分布式缓存来缩放node.js应用程序。现在,让我们看一下另一个受欢迎的缓存解决方案 - 备忘录。

备忘录简介

memcached是一种开源,高性能的分布式内存对象缓存系统。它是数据库调用,API调用或页面渲染的结果,是一个内存中的键值商店。

为什么选择Memcached?

Memcached的简单设计可促进快速部署,易于开发,并解决了大型数据缓存面临的许多问题。它的API适用于大多数流行的语言,使其成为开发人员的多功能选择。

设置备忘录

首先,您需要在计算机上安装模因。您可以使用以下命令来执行此操作:

# For Ubuntu
sudo apt-get install memcached

# For MacOS
brew install memcached

集成在node.js中的模因

要使用node.js应用程序中的memcach,您需要安装备用的软件包。您可以使用以下命令来执行此操作:

npm install memcached

安装了备用软件包后,您可以在应用程序中使用它:

const Memcached = require('memcached');
const memcached = new Memcached('localhost:11211');

memcached.set('key', 'value', 10, function (err) { /* handle error */ });

memcached.get('key', function (err, data) {
  console.log(data);
});

在上面的代码中,我们首先需要备用的软件包,然后创建一个新的memcached实例。然后,我们以10秒的寿命设置了一个钥匙值对。之后,我们从memcached中检索键的值。

用纪念缩放

使用Memcached缩放Node.js应用程序时,您可以使用多个Memcached服务器。 MEMCACHED软件包允许您在创建新的Memcached实例时传递服务器位置数组:

const memcached = new Memcached(['localhost:11211', 'localhost:11212']);

在上面的代码中,我们创建了一个带有两个磁盘服务器的新的备忘录实例。后备包装将自动在服务器之间分配键。

实施备忘录

让我们研究使用memcached在node.js应用程序中的分布式缓存的实现。像Part1一样,我们将使用缓存数据库查询结果的示例。

const Memcached = require('memcached');
const memcached = new Memcached('localhost:11211');

// Example route handler in an Express.js application
app.get('/users/:id', async (req, res) => {
  const userId = req.params.id;
  const cacheKey = `user:${userId}`;

  // Check if the data exists in the cache
  memcached.get(cacheKey, async (err, cachedData) => {
    if (cachedData) {
      // Data found in the cache, return it
      const user = JSON.parse(cachedData);
      res.json(user);
    } else {
      // Fetch data from the database
      const user = await fetchUserFromDatabase(userId);

      // Store the data in the cache with an expiration time (e.g., 1 hour)
      memcached.set(cacheKey, JSON.stringify(user), 3600, function (err) { /* handle error */ });

      // Return the data to the client
      res.json(user);
    }
  });
});

// Function to fetch user data from the database
async function fetchUserFromDatabase(userId) {
  // Code to query the database and retrieve user data
  // ...

  // Simulating a delay in fetching data from the database
  await new Promise((resolve) => setTimeout(resolve, 1000));

  // Return the fetched user data
  const user = { id: userId, name: 'John Doe', email: 'john@example.com' };
  return user;
}

结论

在这一部分中,我们探讨了如何成为缩放node.js应用程序的强大工具。它允许您在内存中缓存数据,这可以大大加快应用程序的速度。在本系列的下一部分中,我们将比较Redis的性能和备忘录,以帮助您选择满足您需求的最佳工具。