- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
在 DegitalOcean 中,我必须管理两个服务器“Nodeserver”和一个 redis 服务器“Redisserver”,方法是使前者的 Node/快速应用程序连接成为可能,以便使用后者的数据库。
为了本地测试的目的,我还在'Nodeserver'上本地安装了另一个redis服务器'LocalRedisOnNodeServer'。
我已将“Redisserver”配置为接受外部连接,如 https://www.digitalocean.com/community/tutorials/how-to-set-up-a-redis-server-as-a-session-handler-for-php-on-ubuntu-14-04 所示。当尝试从“LocalRedisOnNodeServer”的 redis-cli 连接时,我能够访问远程“Redis_server”数据库,并且也可以通过它进行读写操作。
我仍然没有为“Redis_server”配置任何安全措施(至于编辑 iptables..),我只设置了一个密码(在 redis.conf 中要求通过),我仍然不知道是否有更多可以在此服务器上使用 SSH 进行安全身份验证(或者也为它配置我的应用程序代码)。
以下是包含 express session 和传递给 session 的 RedisStore(接收 redis 客户端作为参数)的 app.js 文件。
var express = require('express');
var app = express();
var routes = require('./routes');
var errorHandlers = require('./middleware/errorhandlers');
var log = require('./middleware/log');
var partials = require('express-partials');
var cookieParser = require('cookie-parser');
var session = require('express-session');
var RedisStore = require('connect-redis')(session);
var bodyParser = require('body-parser');
var redis = require('redis');
var config = require('./config');
app.set('view engine', 'ejs');
app.set('view options', {defaultLayout: 'layout'});
app.use(partials());
app.use(log.logger);
app.use(express.static(__dirname + '/static'));
app.use(cookieParser(config.secret));
console.log(config.redisConf);
var redisClient = redis.createClient(config.redisConf);
redisClient.on('connect', function() {
console.log('connected to redis!!');
});
redisClient.set('framework', 'AngularJS', function(err, reply) {
console.log('the framwork var was SET to AngularJS : the following is the server answer : ');
console.log(reply);
});
app.use(session({
secret: config.secret,
resave: false,
saveUninitialized: true,
store: new RedisStore({client: redisClient})
}));
// right after the session
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.get('/', routes.index);
app.get('/login', routes.login);
app.post('/login', routes.loginProcess);
app.get('/chat', routes.chat);
app.get('/account/login', routes.login);
app.get('/error', function(req, res, next){
next(new Error('A contrived error'));
});
app.use(errorHandlers.error);
app.use(errorHandlers.notFound);
app.listen(config.port);
console.log("App server running on port " + config.port);
这是 config.js :
var config = {
port: 3000,
secret: 'secret',
redisConf: {
host: 'xxx.xxx.xxx.xxx.', // The redis's server ip
port: '6379',
pass: 'theredispass'
}
};
module.exports = config;
我已经测试了与本地 redis 服务器“LocalRedisOnNodeServer”的应用程序连接,并且它是成功的以及读取和写入 key (用于设置和获取......)。这证明应用程序代码没有问题。但是当我从本地 127.0.0.1 的 redis 主机 (redisConf.host) 更改为 'Redisserver' ip 时,只发生连接(redisClient.on('connect' 回调记录它'已连接到 redis!!'但是读取和写入函数(get 和 set)失败,因为它们的回调没有被触发,另一个问题是无法创建 express 的 session 并且它的值仍然未定义。
我想知道为什么在“Node_server 的 shell(redis-cli)上的本地 redis 服务器的客户端到远程服务器的连接以及读写操作都是可能的,而应用程序代码中的 redisClient 失败。
redis_6379.log 中没有提到错误
最好的问候
最佳答案
我先通过添加解决了
client.on("error", function (err) {
console.log("Error " + err);
});
所以我可以看到哪里出了问题(实际上我的错误是认为 redisClient 属于 connect-redis 模块,所以我没有在 node_redis 模块上看到所有这些可用选项..)并且添加的代码向我展示了问题就像在 this thread 中一样感谢this answer而且,我看到最好将 get 方法移到集合的回调中,因为远程服务器会异步响应..
关于node.js - Redis 客户端连接到 redis 远程服务器,但无法在其上读取或写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33123868/
我有一个关于 Redis Pubsub 的练习,如下所示: 如果发布者发布消息但订阅者没有收到服务器崩溃。订阅者如何在重启服务器时收到该消息? 请帮帮我,谢谢! 最佳答案 在这种情况下,消息将永远消失
我们正在使用 Service Stack 的 RedisClient 的 BlockingDequeue 来保存一些数据,直到它可以被处理。调用代码看起来像 using (var client =
我有一个 Redis 服务器和多个 Redis 客户端。每个 Redis 客户端都是一个 WebSocket+HTTP 服务器,其中包括管理 WebSocket 连接。这些 WebSocket+HTT
我有多个 Redis 实例。我使用不同的端口创建了一个集群。现在我想将数据从预先存在的 redis 实例传输到集群。我知道如何将数据从一个实例传输到集群,但是当实例多于一个时,我无法做到这一点。 最佳
配置:三个redis集群分区,跨三组一主一从。当 Master 宕机时,Lettuce 会立即检测到中断并开始重试。但是,Lettuce 没有检测到关联的 slave 已经将自己提升为 master
我想根据从指定集合中检索这些键来删除 Redis 键(及其数据集),例如: HMSET id:1 password 123 category milk HMSET id:2 password 456
我正在编写一个机器人(其中包含要禁用的命令列表),用于监视 Redis。它通过执行禁用命令,例如 (rename-command ZADD "")当我重新启动我的机器人时,如果要禁用的命令列表发生变化
我的任务是为大量听众使用发布/订阅。这是来自 docs 的订阅的简化示例: r = redis.StrictRedis(...) p = r.pubsub() p.subscribe('my-firs
我一直在阅读有关使用 Redis 哨兵进行故障转移的内容。我打算有1个master+1个slave,如果master宕机超过1分钟,就把slave变成master。我知道这在 Sentinel 中是
与仅使用常规 Redis 和创建分片相比,使用 Redis 集群有哪些优势? 在我看来,Redis Cluster 更注重数据安全(让主从架构解决故障)。 最佳答案 我认为当您需要在不丢失任何数据的情
由于 Redis 以被动和主动方式使 key 过期, 有没有办法得到一个 key ,即使它的过期时间已过 (但 在 Redis 中仍然存在 )? 最佳答案 DEBUG OBJECT myKey 将返回
我想用redis lua来实现monitor命令,而不是redis-cli monitor。但我不知道怎么办。 redis.call('monitor') 不起作用。 最佳答案 您不能从 Redis
我读过 https://github.com/redisson/redisson 我发现有几个 Redis 复制设置(包括对 AWS ElastiCache 和 Azure Redis 缓存的支持)
Microsoft.AspNet.SignalR.Redis 和 StackExchange.Redis.Extensions.Core 在同一个项目中使用。前者需要StackExchange.Red
1. 认识 Redis Redis(Remote Dictionary Server)远程词典服务器,是一个基于内存的键值对型 NoSQL 数据库。 特征: 键值(key-value)型,value
1. Redis 数据结构介绍 Redis 是一个 key-value 的数据库,key 一般是 String 类型,但 value 类型多种多样,下面就举了几个例子: value 类型 示例 Str
1. 什么是缓存 缓存(Cache) 就是数据交换的缓冲区,是存贮数据的临时地方,一般读写性能较高。 缓存的作用: 降低后端负载 提高读写效率,降低响应时间 缓存的成本: 数据一致性成本 代码维护成本
我有一份记录 list 。对于我的每条记录,我都需要进行一些繁重的计算,因为我要在Redis中创建反向索引。为了达到到达记录,需要在管道中执行多个redis命令(sadd为100 s + set为1
我有一个三节点Redis和3节点哨兵,一切正常,所有主服务器和从属服务器都经过验证,并且哨兵配置文件已与所有Redis和哨兵节点一起更新,但是问题是当Redis主服务器关闭并且哨兵希望选举失败者时再次
我正在尝试计算Redis中存储的消息之间的响应时间。但是我不知道该怎么做。 首先,我必须像这样存储chat_messages的时间流 ZADD conversation:CONVERSATION_ID
我是一名优秀的程序员,十分优秀!