草庐IT

cdp-node

全部标签

javascript - 如何避免 Node.js & MongoDB & Redis 堆栈中的狗桩效应?

当某些缓存值过期或由于某种原因将生成新的缓存并且我们在不存在缓存时有巨大的流量时,MongoDB和响应时间将承受沉重的负载显着增加。这通常称为“狗桩效应”。创建缓存后一切正常。我知道这是一个非常普遍的问题,适用于所有使用数据库和缓存系统的Web应用程序。在Node.js&MongoDB&Redis堆栈中,应该怎么做才能避免狗桩效应?最佳做法和常见错误是什么? 最佳答案 防止狗堆积的一种相当成熟的方法是保持“锁”(例如在Redis中)以防止缓存填充逻辑多次触发。第一次调用fetcher(对于给定的内容),(为它)获取锁并设置为过期(例

javascript - Node 聊天室,将消息存储在数组中还是只是 redis?

我正在编写一个需要持久存储对话的多聊天室应用程序(即新用户应该能够看到旧消息)。如果有帮助,我正在使用socket.io。目前,当用户登录到一个房间时,我的Node应用程序会检查是否有人去过那个房间(并且每个房间都有一个分层的父级,例如名为Pets的房间可能属于北美,因为那里'd是一个单独的欧洲宠物室)。如果这是一个人第一次进入房间一段时间,它会从redis加载该房间的所有消息。(最终,redis存储的对话进入了MySQL)。所以我有一个名为messages["PARENT"]["ROOM"]的多维数组,这样messages["NorthAmerica"]["Pets"]将是一个数组,

node.js - redis中循环保存数据的方法

使用这个redisNode客户端https://github.com/mranney/node_redis我想在循环中同时保存这三个用途。但不能保存只有最后一个用户被保存了吗?在这里,我想将rahul0、rahul1、rahul2保存为redis中的用户但只有rahul2得救了。varredis=require("redis"),sys=require("sys"),client=redis.createClient();client.del("channels.59-O");for(varj=0;j请建议怎么做? 最佳答案 您每次

session - Node.js:无法在 Redis pubsub 事件中更新 session ?

我正在尝试开发一个node.js应用程序,它使用redis在后端进程和Node之间传递消息。我希望能够在收到消息的用户session(连接session)指示器中保存。当用户执行ajax查询“IsMessageRecieved”时,我想向他返回我在session中放置的值。我试着用下面的代码来做,但没有成功,session没有被更新。redisSub.on("message",(channel,connectsid)->sessionStore.getconnectsid,(err,session)->if(err||!session)returnelsesession.Message

node.js - 将 Redis 用作某些值的数据库

我注意到redis的所有示例都包含键值选项。例如:key1value1key2value2key3value3但是我的数据库比较复杂,我希望支持一些键的值。key1createday1deleteday1size1key2createday2deleteday2size2key3createday3deleteday3size3另外,例如,我希望按创建日期对数据库进行排序。redis支持吗? 最佳答案 将数据存储在散列中,并使用排序集创建索引。例如:HSETkey1createdayvalueHSETkey1sizevalue等等。

node.js - 用于 mongodb 查询的 redis 缓存层以提高性能

我有一个电子商务网站。我的产品目录在mongodb中,所有其他事务在mysql中。我计划使用express中间件,它将使用redis作为所有传出mongodb查询的缓存层。任何人都可以帮助我设计架构吗?我将非常感激。目前技术栈nodejs+mongodb+mysql 最佳答案 一般redis会很好的缓存数据。与其为每个请求访问主数据库,不如使用缓存技术,这同样取决于您更新缓存数据的频率。如果您错过了频繁更新缓存或每当主数据库发生更改时,就会出现严重的问题。您必须监听数据库更改并更新缓存,截至目前可能mongodb中没有监听器,因此您

node.js - 套接字 io 连接但不发射

我有socketioredis和expresspubsub正在进行,在我的本地主机上它工作得很好我正在使用laravel事件发布到redis然后socketio应该发出消息,它在本地主机上工作正常但在我的生产服务器是一个ec2虚拟机,它只能连接,我可以看到一条控制台消息“已连接”,但它不会发出任何事件,即使消息正在发布到redis这里是我的客户端和服务器//client////servervarexpress=require('express'),http=require('http'),server=http.createServer(app);varapp=express();co

javascript - 如何使用来自 when.js 的 promise 从 node.js 对 redis 进行两次查询

我有一个带有模块redis和when.js的node.js。如何使用when.js中的promise创建两个到redis的查询,然后运行另一个函数。现在我没有when.js的promise。redisClient.get("value_1",function(err,data_1){redisClient.get("value_2",function(err,data_2){another_function(data1,data2);});});请帮帮我。感谢您的回答。 最佳答案 我建议使用Bluebird(而不是when.js)及

node.js - 无法连接到 fakeredis 实例(Nodejs + Redis + Fakeredis)

我用redis编写nodejs应用程序。我想在单元测试中模拟我的redis连接。我使用fakeredis模块来stub我的数据。但是我在获取测试中创建的rediskey时遇到了问题。我可以在测试中获取所有key,但它们在代码中不可用。好像我的代码没有连接到fakeredis实例。我尝试设置端口和主机,还尝试了另一个模块redis-mock。应用:varredis=require('redis');varredisClient=redis.createClient(6379,'127.0.0.1',{});redisClient.keys('*',function(error,reply

arrays - 如何订阅 channel 数组Node + Redis

我正在尝试订阅这样的channel数组:socket.on('subscribe',function(data){console.log(data.channel);socket.join(data.channel);redisClient.subscribe(data.channel);});data.channel返回像这样的json数组:['chanel1','chanel2','chanel5','chanel6','chanel7','chanel9','chanel11','chanel12','chanel132','$2y$10$wGlbS2Hv/pmDnt1Evg0u