在本系列的第一部分中,我们探索了如何使用带有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的性能和备忘录,以帮助您选择满足您需求的最佳工具。