sha*_*lim 8 javascript redis node.js node-redis
今天,我将Redis集成到我的node.js应用程序中,并将其用作会话存储。基本上,在身份验证成功后,我会将相应的用户对象存储在Redis中。
身份验证后收到HTTP请求时,我尝试使用哈希从Redis检索用户对象。如果检索成功,则意味着用户已登录并且可以满足请求。
将用户对象存储在Redis中和进行检索的操作发生在两个不同的文件中,因此每个文件中都有一个Redis客户端。
问题1:可以有两个Redis客户端,每个文件一个吗?还是应该仅实例化一个客户端,并在应用程序的所有区域中使用它?
问题2:node-redis库是否提供一种显示已连接客户端列表的方法?如果是这样,我将能够遍历该列表,并在服务器关闭时为它们中的每一个调用client.quit()。
顺便说一下,这就是我实现服务器“正常关机”的方式:
//Gracefully shutdown and perform clean-up when kill signal is received
process.on('SIGINT', cleanup);
process.on('SIGTERM', cleanup);
function cleanup() {
server.stop(function() {
//todo: quit all connected redis clients
console.log('Server stopped.');
//exit the process
process.exit();
});
};
Run Code Online (Sandbox Code Playgroud)
小智 6
就设计和性能而言,最好创建一个客户端并在您的应用程序中使用它。这在节点中很容易做到。我假设您正在使用redisnpm 包。
redis.js首先,创建一个包含以下内容的文件:
const redis = require('redis');
const RedisClient = (function() {
return redis.createClient();
})();
module.exports = RedisClient
Run Code Online (Sandbox Code Playgroud)
然后,假设在一个文件中set.js,您可以这样使用它:
const client = require('./redis');
client.set('key', 'value');
Run Code Online (Sandbox Code Playgroud)
然后,在您的index.js文件中,您可以导入它并在退出时关闭连接:
const client = require('./redis');
process.on('SIGINT', cleanup);
process.on('SIGTERM', cleanup);
function cleanup() {
client.quit(function() {
console.log('Redis client stopped.');
server.stop(function() {
console.log('Server stopped.');
process.exit();
});
});
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1271 次 |
| 最近记录: |